轻松理解spring IOC
spring IOC(Inversion of control)即控制反转
概念:一,spring框架的核心之一
二,控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
接下来我们以一个数据库连接的案列来阐述IOC的工作原理,下图为该项目的结构体系

本例中我们着重关注util(获取数据库连接对象)以及dao(数据库访问层)的依赖关系解析
本例需求:dao层可以自由,简洁操作mysql和sqlserver数据库
第一步:我们先定义了获取连接对象的接口
package util;
import java.sql.Connection;
public interface MyConnection {
public Connection getConnection();
}
第二步:mysql和sqlserver对上一接口的具体实现(以sqlserver为例)
package util; import java.sql.Connection;
import java.sql.DriverManager; public class MyConnection_sqlserver implements MyConnection {
// 第一步:获取数据连接,让appliction server能够与db server进行交互
private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=CardDB";
private String name = "sa";
private String pwd = "123456";
private Connection conn = null; @Override
public Connection getConnection() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
System.out.println( e.getMessage() );
}
try{
conn = DriverManager.getConnection(url, name, pwd);
}
catch(Exception e){
System.out.println("获取数据库连接时有异常:"+e.getMessage());
}
return conn;
} }
第三步:dao获取连接对象
package dao; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; import entity.BookCard;
import util.MyConnection; public class BookCardDaoImpl implements BookCardDao { private MyConnection c; public void setC(MyConnection c) {
this.c = c;
}
解析:一,在dao中我们只定义了一个连接对象的属性,我们并不用知道具体是哪一个数据库的连接,只需要利用这个对象进行数据库操作即可
二,需要在本类中提供一个公共的set方法以便spring将这个连接对象注入进来
我们可以对照面向对象编程的写法来进一步了解IOC的长处
public class BookCardDaoImpl implements BookCardDao {
MyConnection c = new MyConnection_sqlserver();
解析:在传统面向对象的编程中我们层层级之间的关系紧密耦合在一起这就可能会引起这样一个问题,如果某一层出现问题,则可能影响到其他层,所以迫使其它层也需要作出调整
关键--》spring注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <bean id="myDao1" class="dao.BookCardDaoImpl" scope="prototype">
<property name="c" ref="myConnection1"></property>
</bean> <bean id="myConnection1" class="util.MyConnection_mysql" scope="prototype"></bean> <bean id="myConnection2" class="util.MyConnection_sqlserver" scope="prototype"></bean> </beans>
解析:一,以上为部分spring的配置文件
二,回到本例的需求上来分析,如果我们需要操作mysql数据库只需要在dao这个bean中引用bean_id为myConnection1的bean,同理SqlServer则引用myConnection2
本篇博客到此结束,如果想继续深入理解IOC的朋友欢迎大家阅读下篇自己动手写spring IOC框架
轻松理解spring IOC的更多相关文章
- Java工厂模式解耦 —— 理解Spring IOC
Java工厂模式解耦 -- 理解Spring IOC 最近看到一个很好的思想来理解Spring IOC,故记录下来. 资源获取方式 主动式:(要什么资源都自己创建) 被动式:(资源的获取不是我们创建, ...
- 轻松理解 Spring AOP
目录 Spring AOP 简介 Spring AOP 的基本概念 面向切面编程 AOP 的目的 AOP 术语和流程 术语 流程 五大通知执行顺序 例子 图例 实际的代码 使用 Spring AOP ...
- 如何理解Spring IOC
Spring IOC 思维导图 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Pr ...
- 【死磕 Spring】----- IOC 之深入理解 Spring IoC
在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,本篇为[死磕 Spring]系列博客的第一篇博文,主要 ...
- IOC 之深入理解 Spring IoC
在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,本篇为[死磕 Spring]系列博客的第一篇博文,主要 ...
- 深入理解Spring IOC
转载自 http://www.cnblogs.com/xdp-gacl/p/4249939.html 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概 ...
- 理解 Spring IoC 容器
控制反转与大家熟知的依赖注入同理, 这是通过依赖注入对象的过程. 创建 Bean 后, 依赖的对象由控制反转容器通过构造参数 工厂方法参数或者属性注入. 创建过程相对于普通创建对象的过程是反向, 称之 ...
- 深入理解Spring IOC工作原理
为什么会出现spring,spring出现解决了什么问题? 1.分析普通多层架构存在的问题 JSP->Servlet->Service->Dao 层与层之间的依赖很强,属于耦合而且是 ...
- 深入理解Spring IoC容器和动态代理机制
Deployment期间验证 实现一: <bean id="theTargetBean" class="..."/> <bean id=&qu ...
随机推荐
- MongoDB学习笔记~Mongo集群和副本集
回到目录 一些概念 对于Mongo在数据容灾上,推荐的模式是使用副本集模式,它有一个对外的主服务器Primary,还有N个副本服务器Secondary(N>=1,当N=1时,需要有一台仲裁服务器 ...
- BOOST.Asio——扫盲
以下内容来自互联网. 鉴于版权之类的东西,我只贴出标题和URL. (无法考证下述资料是否原创.) asio串口编程 ...
- Echarts 之三 —— 地市联动数据统计二
一.简介 除了是一个地图之外,我们也可以使用多地图进行地市.区县联动数据统计.需求如下:展示整改广东省的地图,并显示统计信息,当点击某一个地市的时候,就显示该地市的地图,并统计该地市区县的数据信息.二 ...
- Oracle创建表空间和用户
用户名为:C##NEWO ============================================================================= /*分为四步 */ ...
- 3. Python 简介
3. Python 简介 下面的例子中,输入和输出分别由大于号和句号提示符 ( >>> 和 ... ) 标注:如果想重现这些例子,就要在解释器的提示符后,输入 (提示符后面的) 那些 ...
- Socket服务端和客户端(C++,CodeBlocks+GCC编译)
//main.cpp 1 #include "j_socket.h" #include <stdio.h> #include <pthread.h> ; j ...
- OllyUni.dll
OllyUni.dll 周银辉 好像很多人找不到OllyUni.dll ,下载在这里:http://www.phenoelit.org/win/index.html 注:在OllyDBG2.0中用不了 ...
- java并发编程学习: ThreadLocal使用及原理
多线程应用中,如果希望一个变量隔离在某个线程内,即:该变量只能由某个线程本身可见,其它线程无法访问,那么ThreadLocal可以很方便的帮你做到这一点. 先来看一下示例: package yjmyz ...
- 关于DOS与cmd(windows系统)
dos是计算机的最初期的操作系统,对电脑操作必须输入各种dos命令窗口,可以理解成运行计算机机器内部语言,知道编程吗?其实早期dos命令操作系统就是运行计算机内部的编程命令,因此操作人员都必须具有一定 ...
- 我也来写:数据库访问类DBHelper
一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...