Bean的自动装配(Autowiring)
No:不做任何操作
byname:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配
byType:如果容器中存在一个与指定属性类型相同的bean,那么将该属性自动装配;如果存在多个该类型的Bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生
Constructor:与byType方式类似,不同之处在于它应用于构造参数。如果容器中没有找到与构造器参数类型一致的Bean,那么抛出异常
ByName例子:
AutoWiringDAO类
package com.txr.AutoWiring;
public class AutoWiringDAO {
public void say(String word)
{
System.out.println("AutoWiringDAO :"+word);
}
}
AutoWiringService
package com.txr.AutoWiring;
public class AutoWiringService {
private AutoWiringDAO autoWiringDAO;
public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) {
this.autoWiringDAO = autoWiringDAO;
}
public void say(String word)
{
autoWiringDAO.say(word);
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
default-autowire="byName"
>
<bean id="autoWiringService" class="com.txr.AutoWiring.AutoWiringService"/>
<bean id="autoWiringDAO" class="com.txr.AutoWiring.AutoWiringDAO"/>
</beans>
测试文件
package AutoWiring;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.txr.AutoWiring.AutoWiringService;
public class TestAutoWiring {
private ApplicationContext context=null;
@Before
public void init(){
context=new ClassPathXmlApplicationContext("com/txr/resource/spring-ioc.xml");
}
@Test
public void TestByName()
{
AutoWiringService autoWiringService=(AutoWiringService) context.getBean("autoWiringService");
autoWiringService.say("this is test");
}
}
测试结果
AutoWiringDAO :this is test
例子ByType
配置文件改一下将
default-autowire="byName"
改为
default-autowire="byType"
测试结果一样
例子Constructor
将配置中 default-autowire="byName"改为default-autowire="constructor"
然后在Service添加构造方法
public AutoWiringService(AutoWiringDAO autoWiringDAO) {
System.out.println("AutoWiringService");
this.autoWiringDAO = autoWiringDAO;
}
测试结果一样
根据构造器装配是根据构造器的传入bean的类型去构造的