本文主要是介绍spring的注解使用,Autowired和Qualifier,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Spring的注解在使用时须在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-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"><context:annotation-config/></beans>
其中<context:annotation-config />的作用是在给Spring的容器注册了四个类,包括(AutowiredAnnotationBeanPostProcessor , CommonAnnotationBeanPostProcessor , PersistenceAnnotationBeanPostProcessor 和 RequiredAnnotationBeanPostProcessor),这几个类都是为了处理相应的注解。
(1)@Autowired
此注解的作用是为了Spring在进行自动装配时调用的方法,可以注解在 对应属性上,对应属性的set方法上,和任意名字的方法上,可以注解多个,当存在多个此注解时,会多次调用注解了的方法。
例如:
package cn.mastery.service;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;import cn.mastery.dao.BaseDao;public class BaseService extends LifeCycle {@Autowiredprivate BaseDao baseDao;public BaseDao getBaseDao() {return baseDao;}@Autowiredpublic void setBaseDao(BaseDao baseDao) {this.baseDao = baseDao;}//调用加在此注解上的方法来动态装载,也可加在属性声明处,可不需要set和get方法@Autowiredpublic void wired(BaseDao baseDao) {this.baseDao = baseDao;}public Boolean add(Object entity){System.out.println(this.baseDao);return baseDao.add(entity);}public Boolean update(Object entity){return baseDao.update(entity);}public Boolean delete(Object entity){return baseDao.delete(entity);}public List<Object> query(){return baseDao.query();}}
(2)@Qualifier
此注解的作用是为了Spring在进行自动装配时当配置xml时存在多个相同的bean时,Spring无法自动识别出调用的是哪个bean,配上这个注解可以让Spring的容器能够找到对应的bean之后赋值。
例如:
package cn.mastery.service;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;import cn.mastery.dao.BaseDao;public class BaseService extends LifeCycle {private BaseDao baseDao;public BaseDao getBaseDao() {return baseDao;}public void setBaseDao(BaseDao baseDao) {this.baseDao = baseDao;}//调用加在此注解上的方法来动态装载,也可加在属性声明处,可不需要set和get方法@Autowiredpublic void wired(@Qualifier("action")BaseDao baseDao) {this.baseDao = baseDao;}public Boolean add(Object entity){System.out.println(this.baseDao);return baseDao.add(entity);}public Boolean update(Object entity){return baseDao.update(entity);}public Boolean delete(Object entity){return baseDao.delete(entity);}public List<Object> query(){return baseDao.query();}}
xml配置如下:如上@Qualifier的后面名字是action,则Spring容器调用的是id为baseDao1的bean
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"><context:annotation-config></context:annotation-config><!-- 此配置的autowire说明是通过名字来匹配! 则匹配的是第一个bean --><bean id="baseDao" class="cn.mastery.dao.impl.BaseDaoImpl"><qualifier value="main"></qualifier><property name="daoId" value="8"></property><property name="daoStatus" value="good"></property></bean><!-- 此配置的autowire说明是通过名字来匹配! 则匹配的是第一个bean --><bean id="baseDao1" class="cn.mastery.dao.impl.BaseDaoImpl"><qualifier value="action"></qualifier><property name="daoId" value="2"></property><property name="daoStatus" value="bad"></property></bean><bean id="baseService" class="cn.mastery.service.BaseService"></bean><!-- more bean definitions go here --></beans>
这篇关于spring的注解使用,Autowired和Qualifier的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!