SpringIOC中的註解配置


Spring中的註解是個好東西,能夠簡化咱們的操做,可是使用了註解又會在必定的程度上增長程序的耦合度,xml中的配置寫在了類中
雖然簡化了開發過程,可是或多或少的違背了開閉原則。因此在開發過程當中要先明確,那些配置是要常常改動的,那些配置是不會常常改動的。java

ioc中的annotation配置spring

@Autowired(自動注入byType→byName)
1) @Autowired使用後須要在xml文件加入如下配置才能生效: <context:annotation-config/>函數

2) @Autowired註解能夠寫在成員變量、setter方法、構造器函數上面

3) @Autowired默認按照byType匹配的方式進行注入,若是沒有一個bean的類型是匹配的則會拋異常,若是有多個bean的類型都匹配成功了,那麼再按byName方式進行選擇

4) @Autowired若是最終匹配不成功(注意必定是一個都沒有找到的狀況)則會拋出異常,可是若是設置爲 @Autowired(required=false),則最終匹配不成功沒有不會拋出異常。

5) @Autowired能夠結合@Qualifier("beanName")來使用,則能夠達到byName的效果ui

 

@Resource(自動注入byName→byType)
1) @Resource使用後須要在xml文件加入如下配置才能生效:<context:annotation-config/>spa

2) @Resource的做用和@Autowired差很少,只不過 @Resource是默認先用byName,若是找不到合適的就再用byType來注入prototype

3) @Resource有倆個屬性,name和type,使用name屬性則表示要byName匹配,使用type屬性則表示要byType匹配component


@PostConstruct和@PreDestroy
1) 標註了@PostConstruct註解的方法將在類實例化後調用
2) 標註了@PreDestroy註解的方法將在類銷燬以前調用xml

 

@Component
1) @Component註解能夠直接定義bean,而無需在xml定義。可是若兩種定義同時存在,xml中的定義會覆蓋類中註解的Bean定義對象

2) @Component註解直接寫在類上面便可開發

3) @Component有一個可選的參數,用於指定bean的名稱
@Component("boss")
public class Boss{}

4) @Component若是不指定參數,則bean的名稱爲當前類的類名小寫
//和上面例子的相關相同
@Component
public class Boss{}

5) @Component使用以後須要在xml文件配置一個標籤
<context:component-scan/>

6) <context:component-scan base-package="com.briup.ioc.annotation" />
表示spring檢查指定包下的java類,看它們是否使用了 @Component註解

7) @Component定義的bean默認狀況下都是單例模式的,若是要讓這個bean變爲非單例,能夠再結合這個@Scope註解來達到目標@Scope("prototype")


@Component是Spring中全部bean組件的通用形式, @Repository @Service @Controller 則是 @Component的細化
用來表示更具體的用例,分別對應了持久化層、服務層和表現層。
可是至少到如今爲止這個四種註解的實質區別很小(甚至幾乎沒有),都是把當前類註冊爲spring容器中的一個bean


注意:
1.component-scan標籤默認狀況下自動掃描指定路徑下的包(含全部子包)

2.component-scan標籤將帶有@Component @Repository @Service @Controller註解的類自動註冊到spring容器中

3.component-scan標籤對標記了
@Required @Autowired @PostConstruct @PreDestroy @Resource @WebServiceRef @EJB
@PersistenceContext @PersistenceUnit
等註解的類進行對應的操做,將這些類都做爲Component進行註冊

4.component-scan標籤包含了annotation-config標籤的做用

5.使用註解後注意:生成的對象中的基本類型的屬性沒有初始化值

相關文章
相關標籤/搜索