Spring注入

 Spring注入_spring

重点还是看实例吧

Spring注入_java_02

 Spring注入_SPRING_03

 



 

实例:

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

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

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

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

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

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

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

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

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

Spring注入_java_04

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

 

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

Spring注入_java_05

 Spring注入_SPRING_06

 

代码:

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 }