在一個稍大的項目中嬉愧,通常會有上百個組件,如果這些組件采用xml的bean定義來配置喉前,顯然會增加配置文件的體積,查找以及維護起來也不太方便王财。 Spring2.5為我們引入了組件自動掃描機制卵迂,他可以在類路徑底下尋找標注了@Component,@Service,@Controller,@Repository等注解的類,并把這些類納入進spring容器中管理绒净。它的作用和在xml文件中使用bean節(jié)點配置組件時一樣见咒。下面對平時用到的標簽做一下整理。
@Service用于標注業(yè)務(wù)層組件挂疆,@Controller用于標注控制層組件(如struts中的action),@Repository用于標注數(shù)據(jù)訪問組件改览,即DAO組件,而@Component泛指組件缤言,當組件不好歸類的時候宝当,我們可以使用這個注解進行標注。
Spring不但支持自己定義的@Autowired注解胆萧,還支持幾個由JSR-250規(guī)范定義的注解庆揩,它們分別是@Resource、@PostConstruct以及@PreDestroy
@PostConstruct
@PostConstruct注解的方法將會在依賴注入完成后被自動調(diào)用跌穗。他用來修飾一個非靜態(tài)的void()方法订晌。如果想在生成對象時候完成某些初始化操作,而偏偏這些初始化操作又依賴于依賴注入蚌吸,那么就無法在構(gòu)造函數(shù)中實現(xiàn)锈拨。為此,可以使用@PostConstruct注解一個方法來完成初始化
@PreDestroy
@PreDestroy修飾的方法會在服務(wù)器卸載Servlet的時候運行羹唠,并且只會被服務(wù)器調(diào)用一次奕枢,類似于Servlet的destroy()方法。被@PreDestroy修飾的方法會在destroy()方法之后運行肉迫,在Servlet被徹底卸載之前验辞。
@Autowired VS @Resource
@Autowired(這個注解來自spring的),默認按類型裝配喊衫,默認情況下必須要求依賴對象必須存在跌造,如果要允許null值,可以設(shè)置它的required屬性為false,如:@Autowired(required=false)壳贪,如果我們想使用名稱裝配可以結(jié)合@Qualifier注解進行使用
@Resource(這個注解屬于J2EE的)陵珍,默認按名稱裝配,但是需要注意的是违施,如果name屬性一旦指定互纯,就只會按照名稱進行裝配
加上標簽之后都不需要再編寫getter、setter方法磕蒲。
@Autowired(required=false) @Qualifier("baseDao")
private BaseDao baseDao;
?
@Resource(name="baseDao")
private BaseDao baseDao;