? Bean的元數(shù)據(jù)配置福澡,除了可以通過xml文件來配置谦屑,還可以通過注解來進行配置马靠。比較常用的注釋有:@Required,@Autowired看蚜,@Qualifier還有一些JSR注解叫搁。
@Required
? @Required主要是用來標(biāo)注set方法,被標(biāo)注的set方法供炎,一定要在配置文件里進行顯示說明配置渴逻,否則會拋出 BeanInitializationException。
@Autowired
? @Autowired可以用來標(biāo)注屬性和標(biāo)注方法音诫。當(dāng)用@Autowired對屬性進行標(biāo)注時惨奕,可以將屬性的set方法刪去,并且不需要在配置文件中顯示配置竭钝,IoC就會通過byType(自動裝配的一種方法)的方式自動將數(shù)據(jù)注入到bean中梨撞。?
? 可以看到,不需要再在student的bean里面顯示聲明就會自動注入到對象中蜓氨。
? 當(dāng)@Autowired注釋到構(gòu)造方法上的時候聋袋,則將會對該方法的參數(shù)進行自動配置。
bean的配置文件穴吹,再運行時得到的結(jié)果與注釋到set時是一樣的幽勒。
? @Autowired注解到其他方法時,與注解到成員變量時類似港令。當(dāng)某些屬性被設(shè)置成@Autowired時啥容,若在配置文件中不存在相應(yīng)的bean锈颗,則會跳出相應(yīng)的異常;這時咪惠,可以通過@Autoowired(required=false)來跳過該類的配置击吱。
@Qualifier
? 若在bean的xml文件中加入多個同樣是Classroom類的bean時,Spring在構(gòu)造時會默認選擇第一個bean遥昧。若想指定相應(yīng)的bean覆醇,可以通過@Qualifier注解,通過@Qualifier(“bean的id”/“qualifier的value值”)炭臭,就可以指定注入相應(yīng)的bean永脓。
@Component
? @Component注解主要是將一個類聲明成對應(yīng)xml文件里的一個bean標(biāo)簽
? 使用@Component注解,相當(dāng)于在配置文件中寫下:<bean id="senior" class="edu.stu.pojo"/>鞋仍,還有其他類似的注解常摧,如:@Reposity、@Service威创、@Controller這些注解的作用和@Component類似落午,只是其代表著的是不同的層(持久層、服務(wù)層和控制層)肚豺,而@Component主要是用在較為中立的層中溃斋。
使用JSR注釋
? Spring還支持JSR規(guī)范的注釋
@Resource
? @Resource與@Autowired的注釋作用相似,可是@Resource可以制定ByType或者通過ByName方法來進行自動配置详炬;當(dāng)只是使用默認的@Resource時盐类,其實按照ByType的方式來進行自動配置寞奸;而當(dāng)加入屬性name時呛谜,則會按照ByName方式來實現(xiàn)自動配置。
? 若是將name屬性刪去枪萄,因為有多個classsroom的bean隐岛,所以運行結(jié)果則會拋出NoUniqueBeanDefinitionException的異常。
反思感受
? 通過注解來對bean進行配置瓷翻,其實本質(zhì)上還是需要編寫xml文件聚凹,只是利用注解,可以在一定程度上簡化xml文件的編寫齐帚。
? 其實Spring支持的JSR規(guī)范還有其他妒牙,上面只是簡單地介紹@Resource注解;在使用JSR注解之前对妄,需要注冊BeanPostProcessor湘今,使用的是下面的語句
? 可是可以通過<context:annotion-config/>來簡化相應(yīng)的配置。