spring(二)自动装配(非注解)

spring(二)自动装配(非注解)

1.准备

一个people类,一个cat类,一个dog类,people含有dog和cat
Cat类:

public class Cat {
    public void shout() {
        System.out.println("miao");
    }
}

Dog类:

public class Dog {
    public void shout() {
        System.out.println("wang");
    }
}

People类:

public class People {
    //    使用注解的时候,变量名必须和配置文件对应的bean的id相同,而且使用该注解的话,可以将注解加在对应的set方法上,如果加在属性上,
    //对应的set方法可以省略
    @Autowired
    @Qualifier(value = "cat")
    private Cat cat;
    @Autowired
    @Qualifier(value = "dog")
    private Dog dog;
    private String name;
    public Cat getCat() {
        return cat;
    }
    public void setCat(Cat cat) {
        this.cat = cat;
    }
    public Dog getDog() {
        return dog;
    }
    public void setDog(Dog dog) {
        this.dog = dog;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "People{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }
}

2.不使用注解进行自动装配

2.1ByName实现自动装配
#ByName:会在容器上下文中查找和自己对象的set方法后面的值的对应的beanid
    <bean id="cat" class="com.joker.pojo.Cat"/>
    <bean id="dog" class="com.joker.pojo.Dog"/>
    <bean id="people" class="com.joker.pojo.People" autowire="byName"></bean>
    #使用byname的方式进行自动装配时,会在spring容器中去查找people中的set方法,如果想要装配成功,配置文件中两个动物的bean的id必须是people类中对应的set方法后面的值,如setDog,就会自动查找dog,将bean命名为dog1就会报错,原因是根据set后面的名称找不到对应的对象。
2.2ByType实现自动装配
#ByType:会在容器上下文中查找和自己对象属性所属类相同的beanclass,即dog是Dog类,就会去找Dog
	<bean id="cat" class="com.joker.pojo.Cat"/>
    <bean id="dog" class="com.joker.pojo.Dog"/>
    <bean id="people" class="com.joker.pojo.People" autowire="bytype"></bean>
2.3总结ByName和ByType的区别

ByName:需要保证动物的beanid和people中set方法的名字的后面保持一致(setDog的Dog和bean中的id:dog)

ByType:需要保证在spring配置文件中对同一个类型的对象只存在一个bean,对此我们在注册动物的bean的时候甚至id都不需要写,只写一个class(比如:已经注册了id为dog的Dog对象就不能在注册id为dog1的Dog对象)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值