博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring控制反转与依赖注入(IOC、DI)
阅读量:4473 次
发布时间:2019-06-08

本文共 4250 字,大约阅读时间需要 14 分钟。

IOC: 反转控制   Inverse Of Control     

DI:依赖注入 Dependency Injection

目的:完成程序的解耦合 

解释:在应用系统的开发过程中,有spring负责对象的创建,对象依赖关系的组装,对象属性的初始化,程序员只需要在程序接收spring创建的对象即可。

 Object obj= new Object();

IOC :  Object obj;  等着接收spring容器创建好的对象,在程序中将对象的创建的权限交出,反转到spring容器中。

DI:  某个对象需要依赖的其他对象,由spring容器完成所需要依赖对象的赋值

1 使用IOC完成三层结构的解耦合

1.1 搭建三层结构

建立Dao层接口:

1 package org.guangsoft.dao;2 /***3  * 定义dao接口4  * ***/5 public interface UsersDao6 {7     public void saveUsers();8 }

Dao层接口的实现类

1 package org.guangsoft.dao.impl; 2 import org.guangsoft.dao.UsersDao; 3 //dao实现类 4 public class UsersDaoImpl implements UsersDao 5 { 6     @Override 7     public void saveUsers() 8     { 9         System.out.println("---------将对象保存到数据库--------");10     }11 }

建立service接口

1 package org.guangsoft.service;2 /***3  * 用户业务接口4  * **/5 public interface UsersService6 {7     public void addUsers();8 } 

业务层接口的实现类

1 package org.guangsoft.service.impl; 2 import org.guangsoft.dao.UsersDao; 3 import org.guangsoft.service.UsersService; 4 /*** 5  * 用户业务接口实现类 6  * ***/ 7 public class UsersServiceImpl implements UsersService 8 { 9     // 以前:创建Dao对象10     private UsersDao usersDao;11     @Override12     public void addUsers()13     {14         System.out.println("-----------调用Dao层的方法--------------");15         usersDao.saveUsers();16     }17 } 

建立Action

1 package org.guangsoft.service.impl; 2 import org.guangsoft.dao.UsersDao; 3 import org.guangsoft.service.UsersService; 4 /*** 5  * 用户业务接口实现类 6  * ***/ 7 public class UsersServiceImpl implements UsersService 8 { 9     // 以前:创建Dao对象10     private UsersDao usersDao;11     @Override12     public void addUsers()13     {14         System.out.println("-----------调用Dao层的方法--------------");15         usersDao.saveUsers();16     }17 } 

1.2使用spring管理三层的依赖

1 
2
3
7
8
9
10
11
12
13
14
15
16
17
18
19

1.3三层结构的测试

1 package org.guangsoft.test; 2 import org.junit.Test; 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 import org.guangsoft.action.UsersAction; 6 public class TestSpring 7 { 8     @Test 9     public void testHelloSpring()10     {11         // 加载spring的配置文件,获得spring的bean容器12         ApplicationContext ac13         = new ClassPathXmlApplicationContext("applicationContext.xml");14         // 从bean容器中获得需要的对象15         UsersAction usersAction = (UsersAction) ac.getBean("usersAction");16         // 调用action的方法17         usersAction.userReg();18     }19 } 

理解spring的IOC 或者 DI:完成对象依赖的解耦合

2 不同类型属性的注入

2.1简单类型属性

1 
2
3
5
6
7
8
9
10
12
13
14
15

2.2javabean类型

Set或者构造注入:注入的时候使用ref注入

2.3集合类型属性

 

1 
2
3
4
5
6
7
list第一个元素
8
9
10
11
12
13
14
set第一个元素
15
16
17
18
19
20
21
22
23
k1
24
25
v1
26
27
28
29
k2
30
31
32
33
34
35
36
37
38
39
v1
40
v2
41
42
43
 

3 注入方式的总结

      Set注入:调用属性对应的set方法

    简单类型的属性使用property标签的value属性赋值

            javabean对象使用property标签的ref属性赋值

            调用set方法赋值

                 1   必须生成属性对应的set方法

                 2 set注入

     构造注入:调用构造方法给属性赋值

使用构造方法给属性赋值

        1 根据constructor-arg标签的个数,找对应的构造方法

        2 默认constructor-arg的顺序和构造方法的参数顺序是一致的

        3 简单类型使用value,如果参数对象使用ref

 

转载于:https://www.cnblogs.com/guanghe/p/6123318.html

你可能感兴趣的文章
DB2如何将数据库表解锁
查看>>
JAVA开发环境搭建(Mac)
查看>>
网络防卫与控制作业
查看>>
修改及查看mysql数据库的字符集
查看>>
在django中使用时django-nonrel,'django.contrib.auth'不能用的问题
查看>>
c#抽取pdf文档标题(4)——机器学习以及决策树
查看>>
centos7上svn安装
查看>>
面向对象空间和组合
查看>>
shell开发基础:准备100万条测试数据在MYSQL中
查看>>
unity3d与web进行交互
查看>>
direct2d封装
查看>>
JAVA基础--JAVA API常见对象(其他API)13
查看>>
数据库死锁问题
查看>>
VO_0.3
查看>>
linux 命令学习
查看>>
android捕获ListView中每个item点击事件
查看>>
打扫打扫灰尘,我的菜园子要重新开张了
查看>>
spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法...
查看>>
使用OpenSSL为支付宝生成RSA私钥
查看>>
如何在MyEclipse中部署struts2的环境
查看>>