Spring&Spring MVC技术分享-Qualifier注解装配bean
作者:
22-426
,
2022-03-24 17:25:50
,
所有人可见
,
阅读 158
C02_D11_Annotation_Qualifier-使用Qualifier注解指定自动装配的bean
//bean
public interface Person {
void kanChai();
}
@Component
public class Girl implements Person {
private String name;
private Axe axe;
// 有的时候按照类型自动装配,可能有多个符合的类型
// 这个时候按照类型自动装配就会抛出异常
// 所以可以使用@Qualifier限定要注入的bean的名称
@Autowired
@Qualifier("dog")
private Pet pet;
public Girl() {
}
public Girl(Pet pet) {
System.out.println("调用构造函数注入pet属性..................");
this.pet = pet;
}
// @Qualifier注解可用于字段前、setter等方法(可以是其他不是setter的方法)前或方法参数前
// 但是@Qualifier不能用于构造函数前
@Autowired
// @Qualifier("steelAxe")
public void setAxe(@Qualifier("stoneAxe") Axe axe) {
System.out.println("调用setAxe()注入axe属性..................");
this.axe = axe;
}
public void setName(String name) {
this.name = name;
}
public void setPet(Pet pet) {
this.pet = pet;
}
@Override
public void kanChai() {
System.out.println("Girl砍柴,力气更大!!!");
axe.cut();
pet.showSkill();
}
}
public interface Axe {
void cut();
}
@Component
public class SteelAxe implements Axe{
@Override
public void cut() {
System.out.println("钢斧砍柴,很快很快!!!");
}
}
@Component
public class StoneAxe implements Axe{
@Override
public void cut() {
System.out.println("石斧砍柴,不是一般的慢!!!");
}
}
public interface Pet {
void showSkill();
}
@Component
public class Dog implements Pet{
@Override
public void showSkill() {
System.out.println("宠物狗技能:看着柴!");
}
}
//config-beans.xml
<context:component-scan base-package="com.qdu.bean" />
//main
public static void main(String[] args) {
ApplicationContext ctx
=new ClassPathXmlApplicationContext("config/beans.xml");
Person person=ctx.getBean(Person.class);
person.kanChai();
}