1 自动装配的方式
2 自动装配实现
1 自动装配的方式
根据反射的机制
1.1 byName根据属性名自动装配,类似于依赖注入的set注入。(如果找不到set属性中的bean,如果test中用try方法的话,报空指针异常)
1.2 byType根据类名进行注入,xml配置文件beanId可以不用写
1.3 constructor应用于构造器参数。(找不到构造器参数一致的bean,抛异常)
2 自动装配实现
2.1 自动装配byName:
该方式实现方式与set注入类似,唯一不同之处见xml配置文件红色部分
实体类:
package com.imooc.autowiring; public class AutoWiringDaoImpl implements AutoWiringDao{ @Override public void say(String word) { // TODO Auto-generated method stub System.out.println("请你说话:"+word); } }
接口(与set注入相同):
package com.imooc.autowiring; public class AutoWiringService { private AutoWiringDao autoWiringDao; public void setAutoWiringDao(AutoWiringDao autoWiringDao) { this.autoWiringDao = autoWiringDao; } public void sayHello(String word){ autoWiringDao.say(word); } }
xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName"> <bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService"> <!-- <property name="autoWiringDao" ref="autoWiringDao"></property> --> </bean> <bean id="autoWiringDao" class="com.imooc.autowiring.AutoWiringDaoImpl"></bean> </beans>
测试文件:
package com.imooc.autowiring; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; import com.imooc.test.base.UnitTestBase; @RunWith(BlockJUnit4ClassRunner.class) public class TestAutoWiring extends UnitTestBase{ public TestAutoWiring() { super("classpath:spring-autowiring.xml"); // TODO Auto-generated constructor stub } @Test public void testAutoWiring(){ try { AutoWiringService aws = super.getbean("autoWiringService"); aws.sayHello("老婆好!"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
打印结果
三月 02, 2019 6:51:24 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy 三月 02, 2019 6:51:24 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from class path resource [spring-autowiring.xml] 请你说话:老婆好! 三月 02, 2019 6:51:25 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose 信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy
2.2 自动装配byType(其他文件与byName完全一致,只有xml配置文件不同)
xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byType"> <bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService"> </bean> <bean id="autoWiringDao111" class="com.imooc.autowiring.AutoWiringDaoImpl"></bean> </beans>
打印结果
三月 02, 2019 6:51:24 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy
三月 02, 2019 6:51:24 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-autowiring.xml]
请你说话:老婆好!
三月 02, 2019 6:51:25 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy
2.3 constructor(类似于构造依赖注入法)
实体类:
package com.imooc.autowiring; public class AutoWiringService { private AutoWiringDao autoWiringDao; // public void setAutoWiringDao(AutoWiringDao autoWiringDao) { // this.autoWiringDao = autoWiringDao; // } public AutoWiringService(AutoWiringDao autoWiringDao) { this.autoWiringDao = autoWiringDao; } public void sayHello(String word){ autoWiringDao.say(word); } public AutoWiringService() { super(); // TODO Auto-generated constructor stub } }
xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="constructor"> <bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService"> </bean> <bean id="autoWiringDao111" class="com.imooc.autowiring.AutoWiringDaoImpl"></bean> </beans>
测试类:
package com.imooc.autowiring; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; import com.imooc.test.base.UnitTestBase; @RunWith(BlockJUnit4ClassRunner.class) public class TestAutoWiring extends UnitTestBase{ public TestAutoWiring() { super("classpath:spring-autowiring.xml"); // TODO Auto-generated constructor stub } @Test public void testAutoWiring(){ try { AutoWiringService aws = super.getbean("autoWiringService"); aws.sayHello("老婆好!"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
诸葛