三、Spring註解開發
阿新 • • 發佈:2018-11-22
1.入門
- 新建web專案,匯入spring相關jar包,並新增核心配置檔案
applicationContext.xml
如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置元件掃描-->
<context: component-scan base-package="com.itlike.demo1"/>
</beans>
2.第一個Demo
- User
@Component("user") //相當於bean id=""
public class User {
public String name;
}
- applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置元件掃描-->
<context:component-scan base-package="com.itlike.demo1"/>
</beans>
- UserTest
public class UserTest {
@Test
public void test(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
User user =(User) app.getBean("user");
System.out.println(user); //有地址說明已經獲取了物件!
}
}
3.注入屬性值
- User
@Component("user") //相當於bean id=""
public class User {
//使用value註解注入屬性值
@Value("Hello Spring!")
public String name;
}
- applicationContext.xml不變
- UserTest
System.out.println(user.name); //Hello Spring!
4.衍生註解
- 為了更好的進行分層,Spring可以使用其它三個註解,功能類似
- 目前使用哪一個功能都一樣, 後期可能會新增一些屬於各自的屬性
@Controller
–>web層@Service
–>service層@Repository
–>dao層
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
} //甚至可以使用Service、Repository
如圖,也可以使用Controller實現相同的作用,目的是更好的進行MVC分層。
5.屬性注入
- @Value
設定普通屬性值
- @Autowired
設定物件型別的屬性值,直接使用這種方式,是按照型別完全屬性注入;
Dog:
@Component("dog")
public class Dog {
@Value("wc")
public String name;
}
User:
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
//這是按照型別的完全屬性注入
@Autowired
public Dog dog;
}
UserTest:
System.out.println(user.dog.name); //wc
- 但是,習慣上我們是按照名稱完成屬性注入的。如下:
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
@Resource(name="dog") /*根據名稱注入*/
public Dog dog;
}
- @Scope
設定單例模式、多例模式
@Controller("user")
@Scope("singleton") /*prototype*/
public class User {
...
}
6.生命週期
- @PostConstruct(初始化方法)
- @PreDestroy(銷燬方法)
User:
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
@Resource(name="dog") /*根據名稱注入*/
public Dog dog;
@PostConstruct
public void init(){
System.out.println("init ---");
}
@PreDestroy
public void destroy(){
System.out.println("destroy ---");
}
}
UserTest:
@Test
public void test(){
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
User user =(User) app.getBean("user");
System.out.println(user.name); //Hello Spring!
System.out.println(user.dog.name); //wc
app.close();
/* result:
init ---
Hello Spring !
wc
destroy ---
*/
}
7.效益最大化(少數使用)
- XML與註解比較
- XML可以適用任何場景 ,結構清晰,維護方便
- 註解不是自己提供的類使用不了,開發簡單方便
- XML與註解整合開發
- XML管理Bean
- 註解完成屬性注入
- 使用過程中, 可以不用掃描,掃描是為了類上的註解
- 在沒有掃描的情況下, 使用屬性註解@Resource @Value @Autowired @Qulifier
- 步驟如下:
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置元件掃描-->
<!--<context:component-scan base-package="com.itlike.demo1"/>-->
<!--在不掃描的情況下,可以使用屬性注入的註解-->
<context:annotation-config/>
<bean id="person" class="com.itlike.demo1.Person"/>
</beans>
Person:
public class Person {
@Value("zs")
public String name;
}
PersonTest:
public class PersonTest {
@Test
public void test(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person =(Person) app.getBean("person");
System.out.println(person.name); //zs
}
}