package com.ssm.testmybatis.ioc.interfaces; import com.ssm.service.InjectionService; import com.ssm.testmybatis.base.UnitTestBase; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; @RunWith(BlockJUnit4ClassRunner.class) public class TestInjection extends UnitTestBase { public TestInjection() { super("classpath:spring-injection.xml"); } @Test public void testSetter() { InjectionService service = super.getBean("injectionService-setter"); service.save("一、设值注入-这是要保存的数据"); } @Test public void testCons() { InjectionService service = super.getBean("injectionService-constructor"); service.save("二、构造注入-这是要保存的数据"); } @Test public void testStaticFactory() { InjectionService service = super.getBean("injectionService-staticFactory"); service.save("三、静态工厂注入-这是要保存的数据"); } @Test public void testFactory() { InjectionService service = super.getBean("injectionService-factory"); service.save("四、实例工厂注入-这是要保存的数据"); } }
spring-injection.xml配置以下,注意:下面的四种注入方式同一时刻只能开启一种注入方式!!!html
<?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" > <!--一、设值注入setter--> <!--<bean id="injectionService-setter" class="com.ssm.dao.impl.InjectionServiceImpl">--> <!--<property name="injectionDAO" ref="injectionDAO"/>--> <!--</bean>--> <!--二、构造注入--> <!--<bean id="injectionService-constructor" class="com.ssm.dao.impl.InjectionServiceImpl">--> <!--<constructor-arg ref="injectionDAO"/>--> <!--</bean>--> <!--<bean id="injectionDAO" class="com.ssm.dao.impl.InjectionDAOImpl"></bean>--> <!--三、静态工厂注入--> <!--<bean id="injectionService-staticFactory" class="com.ssm.dao.impl.InjectionServiceImpl">--> <!--<property name="injectionDAO" ref="userDao_name"/>--> <!--</bean>--> <!--<bean name="userDao_name" class="com.render.InjectionDaoFactory" factory-method="createInjectDaoStaticInstance" />--> <!--四、工厂方法注入--> <bean id="injectionService-factory" class="com.ssm.dao.impl.InjectionServiceImpl"> <property name="injectionDAO" ref="userDao_name"/> </bean> <bean name="userDaoFactory_name" class="com.render.InjectionDaoFactory" /> <bean name="userDao_name" factory-bean="userDaoFactory_name" factory-method="createInjectDaoInstance" /> </beans>
工厂类:spring
package com.render; import com.ssm.dao.impl.InjectionDAOImpl; /** * Created by yg on 2019/2/25. */ public class InjectionDaoFactory { public static InjectionDAOImpl createInjectDaoStaticInstance() { System.out.println("---- 进入到静态工厂方法"); return new InjectionDAOImpl(); } public InjectionDAOImpl createInjectDaoInstance() { System.out.println("---- 进入到工厂方法"); return new InjectionDAOImpl(); } }
package com.ssm.service; public interface InjectionService { public void save(String arg); }
package com.ssm.dao.impl;
import com.ssm.service.InjectionService;
import com.ssm.dao.InjectionDAO;
public class InjectionServiceImpl implements InjectionService {
private InjectionDAO injectionDAO;
// //构造器注入
// public InjectionServiceImpl(InjectionDAO injectionDAO1) {
// this.injectionDAO = injectionDAO1;
// }
//设值注入,注意:静态工厂注入和实例工厂注入必须实现setter方法!!!
public void setInjectionDAO(InjectionDAO injectionDAOcccc) {
this.injectionDAO = injectionDAOcccc;
}
public void save(String arg) {
//模拟业务操做
System.out.println("Service接收参数:" + arg);
arg = arg + ":" + this.hashCode();
injectionDAO.save(arg);
}
}
package com.ssm.dao; public interface InjectionDAO { public void save(String arg); }
package com.ssm.dao.impl; import com.ssm.dao.InjectionDAO; public class InjectionDAOImpl implements InjectionDAO { public void save(String arg) { //模拟数据库保存操做 System.out.println("保存数据:" + arg); } }