Spring注入

Spring注入

 

重点还是看实例吧

 


实例:

有一个InjectionDao的接口,然后InjectionDaoImpl实现了InjectionDao接口,相当于完成了数据库的操作。

有一个InjectonServer的接口,然后InjectonServerImpl实现了InjectonServer接口,这是服务层的操作。

下面是设值注入和构造注入:

我们需要在service层完成逻辑操作,所以service层肯定需要调用dao层来完成数据库的操作。

所以service层肯定有dao层的对象,而我们说的设值注入,构造注入,就是对这个对象而言的。

在类中给对象赋值的方式有两种,一种是set方式,一种是构造函数,就对应我们这里所说的设值注入和构造注入。

所以在service层的时候我们有dao对象的set方法和构造函数。

但是,这个set方法的调用(设值注入)和构造函数的调用(构造注入)却是通过配置文件来完成的。

这个配置文件相当于IOC容器的功能,所以运行实例的时候,要先引入容器,也就是先引入XML文件。

其实,设值注入和构造注入就是XML文件(IOC容器)完成了成员赋值(调用set函数或者构造器)的过程

IOC方式我们用的对象不是我们自己创建的,也是IOC容器给我们的,我们通过getBean的方式申请对象,如下:

 

代码:

spring-injection.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5         http://www.springframework.org/schema/beans/spring-beans.xsd" >
 6         
 7 <!--         <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> -->
 8 <!--             <property name="injectionDAO" ref="injectionDAO"></property> -->
 9 <!--         </bean> -->
10 
11         <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
12             <constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
13         </bean>
14         
15         <bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean>
16     
17  </beans>

InjectionDAO.java

1 package com.imooc.ioc.injection.dao;
2 
3 public interface InjectionDAO {
4     
5     public void save(String arg);
6     
7 }

InjectionDAOImpl.java

 1 package com.imooc.ioc.injection.dao;
 2 
 3 public class InjectionDAOImpl implements InjectionDAO {
 4     
 5     public void save(String arg) {
 6         //模拟数据库保存操作
 7         System.out.println("保存数据:" + arg);
 8     }
 9 
10 }

InjectionService.java

1 package com.imooc.ioc.injection.service;
2 
3 public interface InjectionService {
4     
5     public void save(String arg);
6     
7 }

InjectionServiceImpl.java

 1 package com.imooc.ioc.injection.service;
 2 
 3 import com.imooc.ioc.injection.dao.InjectionDAO;
 4 
 5 
 6 public class InjectionServiceImpl implements InjectionService {
 7     
 8     private InjectionDAO injectionDAO;
 9     
10     //构造器注入
11     public InjectionServiceImpl(InjectionDAO injectionDAO1) {
12         this.injectionDAO = injectionDAO1;
13     }
14     
15     //设值注入
16     public void setInjectionDAO(InjectionDAO injectionDAO) {
17         this.injectionDAO = injectionDAO;
18     }
19 
20     public void save(String arg) {
21         //模拟业务操作
22         System.out.println("Service接收参数:" + arg);
23         arg = arg + ":" + this.hashCode();
24         injectionDAO.save(arg);
25     }
26     
27 }

TestInjection.java

 1 package com.imooc.test.ioc.interfaces;
 2 
 3 import org.junit.Test;
 4 import org.junit.runner.RunWith;
 5 import org.junit.runners.BlockJUnit4ClassRunner;
 6 
 7 import com.imooc.ioc.injection.service.InjectionService;
 8 import com.imooc.test.base.UnitTestBase;
 9 
10 @RunWith(BlockJUnit4ClassRunner.class)
11 public class TestInjection extends UnitTestBase {
12     
13     public TestInjection() {
14         super("classpath:spring-injection.xml");
15     }
16     
17     @Test
18     public void testSetter() {
19         InjectionService service = super.getBean("injectionService");
20         service.save("这是要保存的数据");
21     }
22     
23     @Test
24     public void testCons() {
25         InjectionService service = super.getBean("injectionService");
26         service.save("这是要保存的数据");
27     }
28     
29 }
原文地址:https://www.cnblogs.com/Renyi-Fan/p/7777935.html