0. 名词解释
IoC (Inversion of Control): 应用程序本身不负责依赖对象的创建和维护,而是由外部容器(Spring Container)负责创建和维护。
1. 初始化Bean容器
by classpath
try { context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\s]+")); context.start(); } catch (BeansException e) { e.printStackTrace(); }
2. Spring 的2种注入方式
injectionService是主bean,injectionDAO 是成员变量,自动调用setInjectionDAO。
public class InjectionServiceImpl implements InjectionService { private InjectionDAO injectionDAO; //构造器注入 public InjectionServiceImpl(InjectionDAO injectionDAO1) { this.injectionDAO = injectionDAO1; } //设值注入 public void setInjectionDAO(InjectionDAO injectionDAO) { this.injectionDAO = injectionDAO; } public void save(String arg) { //模拟业务操作 System.out.println("Service接收参数:" + arg); arg = arg + ":" + this.hashCode(); injectionDAO.save(arg); } }
public class InjectionDAOImpl implements InjectionDAO{ public void save(String arg){ //模拟数据库保存操作 System.out.println("保存数据"+arg); } }
测试
@RunWith(BlockJUnit4ClassRunner.class) public class TestInjection extends UnitTestBase{ public TestInjection(){ super("classpath:spring-injection.xml"); } @Test public void testSetter(){ InjecionService service = super.getBean("injectionService"); service.save("要保存的数据"); } @Test public void testCons(){ InjecionService service = super.getBean("injectionService"); service.save("要保存的数据"); } }
(1)设值注入
<?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" > <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<property name="injectionDAO" ref="injectionDAO"></property>
</bean> <bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean> </beans>
(2)构造注入
<?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" > <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> <constructor-arg ref="injectionDAO"></constructor-arg> </bean> <bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean> </beans>