Spring @Autowired和@Qualifier注解

介绍:

@Autowired和@Qualifier是Spring项目中比较常用的两个注解。一般在同一个实现Bean可以在不同的平台使用,Controller调用Service,Service调用DAO。其中很多实例都是使用@Autowired自动实现,但是如果同一份Bean实例有不同的构造器来创建的时候,使用Autowired自动创建Bean实例IOC容器就分不清了,这时候需要使用@Qualifier来指定特定的bean实例构造方法。


@Autowired可以标注类中引用属性,构造方法,和普通方法。用Autowired标记的属性和方法,都会自动创建实体,当然对于方法中的参数意思是IOC容器自动创建bean实体,并负责给参数列表中的引用了。

@Autowired标记的方法都会在实体创建的时候,自动调用。


实例:

1.创建两个实体bean,代码如下:

QualifierBean实体Bean实现代码

package com.yangwan.beans;

public class QualifierBean {
	private String idstr;
	private int value;
	private String defaultFlag = "默认标识";
	public QualifierBean(String idstr, int value){
		this.idstr = idstr;
		this.value = value;
	}
	public QualifierBean(String idstr,int value,String defaultFlag){
		this.idstr = idstr;
		this.value = value;
		this.defaultFlag = defaultFlag;
	}
	public String getIdstr() {
		return idstr;
	}

	public void setIdstr(String idstr) {
		this.idstr = idstr;
	}

	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
	public void printQualifierBeanInformation(){
		System.out.println(this);
		System.out.println("idstr: "+this.idstr+"\nvalue: "+
					this.value+"\ndefaultFlag: "+this.defaultFlag);
	}
}

QualifierTestBean实体Bean代码实现
package com.yangwan.beans;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

public class QualifierTestBean {
	private QualifierBean twoqb;
	private QualifierBean threeqb;
	public QualifierTestBean(){
		
	}
	//利用两个参数的构造器自动创建QualifierBean实例
	 @Autowired
	public void setTwoqbTest(@Qualifier("twoparaqualifierbean")QualifierBean twoqb){
		this.twoqb = twoqb;
	}
	 @Autowired
	public void setThreeqbTest(@Qualifier("threeparaqualifierbean")QualifierBean threeqb){
		this.threeqb = threeqb;
	}
	public void printQualifierTestBeanInformation(){
		this.twoqb.printQualifierBeanInformation();
		this.threeqb.printQualifierBeanInformation();
	}
}

注解:QualifierBean中有三个属性,分别为idstr,value和defaultFlag。有两个构造函数,分别带有两个参数和三个参数,带有三个参数的构造函数会修改defaultFlag属性。最后有个printQualifierBeanInformation()方法来输出bean的信息。在QualifierTestBean中,又twoqb和threeqb两个属性,都是有@Autowired自动创建,由@Qualifier指定创建的构造函数。

接下来看下配置文件:

<context:annotation-config />
	 <context:component-scan
            base-package="com.yangwan.beans"/>
            
	 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
	 
     <!--  利用@Qualifier来自动创建Bean实例,不需要设置id,只需要设置class便可 -->
	      <bean class="com.yangwan.beans.QualifierBean">
			<qualifier value="twoparaqualifierbean"></qualifier>
			<constructor-arg index="0" value="001"></constructor-arg>
			<constructor-arg index="1" value="22"></constructor-arg>
	       </bean>
               <bean class="com.yangwan.beans.QualifierBean">
			<qualifier value="threeparaqualifierbean"></qualifier>
			<constructor-arg name="idstr" value="002"></constructor-arg>
			<constructor-arg name="value" value="23"></constructor-arg>
			<constructor-arg name="defaultFlag" value="修改Flag"></constructor-arg>
	        </bean>
     <bean id="qualifiertestbean" class="com.yangwan.beans.QualifierTestBean"></bean>

注解:加上<context:annotation-config />开启注解。

           加上<context:component-scan base-package="com.yangwan.beans"/>扫描包

测试函数:

package com.yangwan.test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

import com.yangwan.beans.Boss;
import com.yangwan.beans.QualifierTestBean;

public class MainTest {
	public static void main(String[] args) {     
        String[] locations = {"file:C:/Users/bw/Desktop/yw/AutowireTestPro/src/main/resources/spring/application-config.xml"};     
        ApplicationContext ctx =      
            new ClassPathXmlApplicationContext(locations);     
        Boss boss = (Boss) ctx.getBean("boss");     
        System.out.println(boss);   
        boss.printInformation();
        QualifierTestBean qtb = (QualifierTestBean)ctx.getBean("qualifiertestbean");
        qtb.printQualifierTestBeanInformation();
    }     
}

注解:在创建ApplicationContext的时候,如果配置文件的classpath相对路径不清楚,可以使用绝对路径,更加明了。以上的包名,配置文件路径都是博主的哦,自己注意修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值