轻松理解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 ...
随机推荐
- Python 常用模块之time&datetime 和random
本节大纲: 模块介绍 time &datetime模块 random 一.模块介绍: 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他 ...
- [Java入门笔记] Java语言基础(一):注释、标识符与关键字
注释 什么是注释? 注释是我们在编写代码时某段代码.某个方法.某个类的说明文字,方便大家对于代码的阅读.被注释的内容不会被编译.执行. Java的注释分为三种类型:单行注释.多行注释.文档注释. 单行 ...
- 开发人员必读openstack网络基础
云计算中的网络非常复杂,需要对网络的基础理论有一定的认识和了解,转载网上针对openstack中涉及到网络概念的文章 开发人员必读openstack网络基础1:什么是L2.L3 开发人员必读opens ...
- 找不到mysql.sock,mysql.sock丢失问题解决方法
Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) "; 是你的mysql ...
- [django]django+datatable简单运用于表格中
使用datatable首先需要下载datatable文件,文件主要包括三个文件夹css,img,js相关文件,在django中如何配置呢? 首先需要在模板中引入datatable文件,格式如下: &l ...
- FeWeb基础之JavaScript简介
FeWeb基础之JavaScript简介 1.JavaScript的基本介绍 JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,它是通过嵌入或调入在标准的HTML语言中实现的.Ja ...
- less简单入门
官网地址 http://lesscss.org/ less手册 www.lesscss.net/ bootstrap官网less介绍 http://www.bootcss.com/p/lesscss/ ...
- 【2016-11-1】【坚持学习】【Day16】【MongoDB】【复制集 分片】
Mongodb 两种集群方式 复制集 通常是一主一从,一主多从 mongodb的复制至少需要两个节点.其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据. mongodb各 ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...
- CRC32算法
unsigned ] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0 ...