自动装配举例:byName

/**
 * 
 * 依赖者类,需要注入两个bean
 * 第一个bean的name为one
 * 第二个bean的name为two
 * 
 *info是一个String类型,要手动注入
 */
public class Dependent {
    private String info;
    private Collaborator one;
    private Collaborator two;

    public void setInfo(String info) {
        this.info = info;
    }
    public void setOne(Collaborator one) {
        this.one = one;
    }
    public void setTwo(Collaborator two) {
        this.two = two;
    }
    public String toString() {
        return "Dependent [info=" + info + ",\n\tone=" + one + ",\n\ttwo=" + two + "\n]";
    }
}


public class Collaborator {
    private String info;

    public void setInfo(String info) {
        this.info = info;
    }

    public String toString() {
        return "Collaborator [info=" + info + "]";
    }
}

配置元数据:

<bean id="dependent" class="SpringTest.autoWireByName.Dependent" autowire="byName">
    <property name="info" value="This is dependent"/>
</bean>

<bean id="one" class="SpringTest.autoWireByName.Collaborator">
    <property name="info" value="This is collaboratorOne"/>
</bean>

<bean id="two" class="SpringTest.autoWireByName.Collaborator">
    <property name="info" value="This is collaboratorTwo"/>
</bean>

<bean id="zero" class="java.lang.String">
    <constructor-arg value="This is stringBean"/>
</bean>

输出注入后的结果:System.out.println(context.getBean("dependent"));

输出结果:

                    

分析:

Dependent类共有三个属性,第一个属性名为info,是一个String类型,需要手动注入;第二个属性和第三个属性可以通过自动装配的方式注入,由于使用byName方式自动装配,所以,要被注入的bean的名字要和属性(字段)名相同;第二个和第三个的属性名分别为one和two,因此,创建一个id/name为one的bean,类型要与属性one的类型匹配;创建一个id/name为two的bean,类型要与属性two的类型匹配。

注:通过byName进行匹配时,找到了要被注入的bean,这个bean的类型一定要和属性的类型匹配,否则就会抛出异常。

发布了213 篇原创文章 · 获赞 116 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq2071114140/article/details/104247196
今日推荐