赞
踩
return “DiAutowireByName{” +
“service1=” + service1 +
“, service2=” + service2 +
‘}’;
}
}
这个类中有2个属性,名称为:
service1
service2
这两个属性都有对应的set方法。
下面我们在bean xml中定义2个和这2个属性同名的bean,然后使用按照名称进行自动注入。
diAutowireByName.xml
<?xml version="1.0" encoding="UTF-8"?>上面注释认真看一下。
@1:定义了一个名称为service1的bean
@2:定义了一个名称为service2的bean
@3:定义diAutowireByName需要将autowire的值置为byName,表示按名称进行自动注入。
spring容器创建diAutowireByName对应的bean时,会遍历DiAutowireByName类中的所有set方法,然后得到set对应的属性名称列表:{“service1”,“service2”},然后遍历这属性列表,在容器中查找和属性同名的bean对象,然后调用属性对应的set方法,将bean对象注入进去
测试用例
package com.javacode2018.lesson001.demo6;
import com.javacode2018.lesson001.demo5.IocUtils;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class DiAutowireTest {
/**
效果
运行diAutowireByName输出:
setService1->Service1{desc=‘service1’}
setService2->Service2{desc=‘service2’}
setService2->Service2{desc=‘service2-1’}
setService1->Service1{desc=‘service1’}
DiAutowireByName{service1=Service1{desc=‘service1’}, service2=Service2{desc=‘service2’}}
DiAutowireByName{service1=Service1{desc=‘service1’}, service2=Service2{desc=‘service2-1’}}
按名称进行注入的时候,要求名称和set属性的名称必须同名,相对于硬编码的方式注入,确实节省了不少代码。
autowire设置为byType
spring容器会遍历x类中所有的set方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。