spring是一个轻量级的容器框架,主要是为了使企业的开发变得简单、高效。无论是从大小还是开销来讲,他都可以算是轻量级的,也是非侵入性的。

下图是spring的框架示意图,说到spring,就不得不提他的控制反转(IOC,Inversion of Control)。

那么他的控制反转是如何实现的呢?

      控制反转一般有两种类型,依赖注入(DI)和依赖查找。依赖注入应用比较广泛。

首先来看,如果没有使用spring,我们的一般操作是怎样的。

client,dao和manager三个包,其中client为客户端调用,UserDao和UserManager为接口。

/*
* mysql的实现类
*/
public class UserDao4MySqlImpl implements UserDao { //添加用户
public void addUser(String username, String password) {
System.out.println("UserDao4MySqlImpl.addUser()");
} } /*
* oracle的实现类
*/
public class UserDao4OracleImpl implements UserDao {
//添加用户
public void addUser(String username, String password) {
System.out.println("UserDao4OracleImpl.addUser()");
} }

业务层的实现类

public class UserManagerImpl implements UserManager {

	@Override
public void addUser(String username, String password) {
// 由我们的应用程序负责服务(对象)定位
//如果不使用mysql数据库,就需要修改该类的方法实现
// UserDao userDao = new UserDao4MySqlImpl();
UserDao userDao = new UserDao4OracleImpl();
userDao.addUser(username, password); } }

客户端调用方法:

public class Client {

	public static void main(String[] args) {

		// 由我们的应用程序负责服务(对象)定位
UserManager userManager = new UserManagerImpl();
userManager.addUser("张三", "123");
} }

我们知道对象的创建过程,如果需求有变,可以进行更换。尽管可以进行修改,但始终是应用程序来管理对象之间的依赖关系,而spring的控制反转,将这个操作交给容器管理。

DI(Dependency Injection)

这里说两种DI注入的方式:setter注入和构造方法注入。

1)setter注入

我们还是举上面的例子,dao包中的内容都不需要改变,我们只需要将manager包中进行调整即可。如在UserManagerImpl类中,注入UserDao。

public class UserManagerImpl implements UserManager {

	private UserDao userDao;

	public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
....
<span style="font-size:18px;">}</span>

配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="userDao4Mysql" class="com.spring.dao.UserDao4MySqlImpl"/> <bean id="usrDao4Oracle" class="com.spring.dao.UserDao4OracleImpl"/> <bean id="userManager" class="com.spring.manager.UserManagerImpl">
<!--使用setter方法注入-->
<property name="userDao" ref="usrDao4Oracle"/>
</bean>
</beans>

2)构造方法注入

public class UserManagerImpl implements UserManager {

	private UserDao userDao;
//构造方法
public UserManagerImpl(UserDao userDao) {
this.userDao = userDao;
}
...
}

将配置文件中的userManager的bean进行修改

 <bean id="userManager" class="com.spring.manager.UserManagerImpl">
<!--
<constructor-arg ref="userDao4Mysql"/>
-->
<!-- 使用构造函数 --> <constructor-arg ref="usrDao4Oracle"/> </bean>

当然,DI还有其他的实现方式,在这里就不介绍了,跟这两种都很类似。

小结:

通过控制反转,我们将类与类之间的关系,对象的生成放到了配置文件中,这样既在一定程度上实现了解耦,也使得改变更加容易。

【SSH】——spring的控制反转和依赖注入的更多相关文章

  1. 简单了解Spring的控制反转和依赖注入

    浅谈控制反转(Inversion of Control,IOC) 我们首先先来了解一下控制二字,也就是在控制"正"转的情况下,在任何一个有请求作用的系统当中,至少需要有两个类互相配 ...

  2. Spring的控制反转和依赖注入

    Spring的官网:https://spring.io/ Struts与Hibernate可以做什么事? Struts, Mvc中控制层解决方案 可以进行请求数据自动封装.类型转换.文件上传.效验… ...

  3. Spring理论基础-控制反转和依赖注入

    第一次了解到控制反转(Inversion of Control)这个概念,是在学习Spring框架的时候.IOC和AOP作为Spring的两大特征,自然是要去好好学学的.而依赖注入(Dependenc ...

  4. spring(3)------控制反转(IOC)/依赖注入(DI)

    一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...

  5. Spring、控制反转与依赖注入(概念)

    Spring 一个开源的控制反转(Inversion of Control ,Ioc)和面向切面(AOP)的容器框架. 主要目的:简化开发 控制反转(Inversion of Control ,Ioc ...

  6. 如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等

    之前一直不理解spring的一些基础特性是什么意思,虽然网上的解释也很多,但是由于我比较笨,就是看不懂,知道最近才稍微了解,下面就以通俗讲解的方式记录下来. 前言 假设我是一个没有开店经验的小老板,准 ...

  7. Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)

    关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...

  8. Spring 1 控制反转、依赖注入

    1.1 Spring的核心是控制反转(IoC)和面向切面(AOP) 学习spring之前的开发中通过new创建一个对象,有了spring之后,spring创建对象实例-IoC控制反转,之后需要实例对象 ...

  9. spring IOC --- 控制反转(依赖注入)----简单的实例

    IoC(Inversion of Control)控制反转,对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的 ...

随机推荐

  1. ABAP术语-BW (Business Information Warehouse)

    BW (Business Information Warehouse) 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/14/1037761. ...

  2. Maven里面多环境下的属性过滤(配置)

    情景:通常一个项目都为分为开发环境(dev)和测试环境(test)还有正式环境(prod),如果每次一打包都要手动地去更改配置文件,例如数据库连接配置.将会很容易出差错. 解决方案:maven pro ...

  3. 路由器基础配置之ospf基础配置

    我们将以上面的拓扑图进行本次ospf的实验,目的是能当三台pc机互通 先配置好pc机的IP地址,注意一定要给pc机设置好网关,接下来配置路由器的IP地址 router4 enable 进入特权模式 c ...

  4. vs2017升级、安装

    图解VS 2017升级并安装.NET Core 2.1 SDK https://jingyan.baidu.com/album/ff42efa9fb5816c19e2202ef.html?picind ...

  5. Spring笔记1

    Spring Spring特点 1. 方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.有了Spring,用户 ...

  6. 构造HTTP请求Header实现“伪造来源IP”

    在阅读本文前,大家要有一个概念,在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以伪造数据包来源 IP ,但这会让发送出去的数据包有去无回,无 ...

  7. flask的模板

    flask用的是jinja2的模板 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取 使用真实值替换变量,再返回最终得到的字符串,这个过 ...

  8. XML文件中关键字自动提示和不全配置

    一.获得mybatis-3-config.dtd.mybatis-3-mapper.dtd 这两个文件. 建立一个Maven的项目 在Pom.xml文件中的Mybatis jar包的下载设置(也可以从 ...

  9. ORB-SLAM 代码笔记(三)tracking原理

    ORB视觉里程计主体在tracking线程中

  10. 让Dreamweaver支持cshtml (MVC Razor环境)

    介绍:让Dreamweaver支持cshtml 正文: 如题,刚才搜了很久,都搜不到答案,幸好得到“包大人”(同事)的帮助,才得以解决. DW支持很多文件类型的代码提示,可是类型太多,不可能全部都有, ...