轻松理解spring IOC

  spring IOC(Inversion of control)即控制反转

  概念:一,spring框架的核心之一

     二,控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系

  接下来我们以一个数据库连接的案列来阐述IOC的工作原理,下图为该项目的结构体系

  本例中我们着重关注util(获取数据库连接对象)以及dao(数据库访问层)的依赖关系解析

  本例需求:dao层可以自由,简洁操作mysql和sqlserver数据库

  第一步:我们先定义了获取连接对象的接口

1 package util;
2
3 import java.sql.Connection;
4
5 public interface MyConnection {
6     public Connection getConnection();
7 }

  第二步:mysql和sqlserver对上一接口的具体实现(以sqlserver为例)

 1 package util;
 2
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5
 6 public class MyConnection_sqlserver implements MyConnection {
 7      9     // 第一步:获取数据连接,让appliction server能够与db server进行交互
10     private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
11     private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=CardDB";
12     private String name = "sa";
13     private String pwd = "123456";
14     private Connection conn = null;
15
16     @Override
17     public Connection getConnection() {
18         try {
19             Class.forName(driver);
20         } catch (ClassNotFoundException e) {
21             System.out.println( e.getMessage() );
22         }
23         try{
24             conn = DriverManager.getConnection(url, name, pwd);
25         }
26         catch(Exception e){
27             System.out.println("获取数据库连接时有异常:"+e.getMessage());
28         }
29         return conn;
30     }
31
32 }

  第三步:dao获取连接对象

 1 package dao;
 2
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.util.ArrayList;
 7 import java.util.List;
 8
 9 import entity.BookCard;
10 import util.MyConnection;
11
12 public class BookCardDaoImpl implements BookCardDao {
13
14     private MyConnection c;
15
16     public void setC(MyConnection c) {
17         this.c = c;
18     }

  解析:一,在dao中我们只定义了一个连接对象的属性,我们并不用知道具体是哪一个数据库的连接,只需要利用这个对象进行数据库操作即可

     二,需要在本类中提供一个公共的set方法以便spring将这个连接对象注入进来

  我们可以对照面向对象编程的写法来进一步了解IOC的长处

1 public class BookCardDaoImpl implements BookCardDao {
2
3     MyConnection c = new MyConnection_sqlserver();

  解析:在传统面向对象的编程中我们层层级之间的关系紧密耦合在一起这就可能会引起这样一个问题,如果某一层出现问题,则可能影响到其他层,所以迫使其它层也需要作出调整

  关键--》spring注入

 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         xmlns:p="http://www.springframework.org/schema/p"
 5         xmlns:aop="http://www.springframework.org/schema/aop"
 6         xmlns:context="http://www.springframework.org/schema/context"
 7         xmlns:jee="http://www.springframework.org/schema/jee"
 8         xmlns:tx="http://www.springframework.org/schema/tx"
 9         xsi:schemaLocation="
10             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
11             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
12             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
13             http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
14             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
15
20     <bean id="myDao1" class="dao.BookCardDaoImpl" scope="prototype">
21         <property name="c" ref="myConnection1"></property>
22     </bean>
23
28     <bean id="myConnection1" class="util.MyConnection_mysql" scope="prototype"></bean>
29
30     <bean id="myConnection2" class="util.MyConnection_sqlserver" scope="prototype"></bean>
31
32 </beans>
33             

  解析:一,以上为部分spring的配置文件

     二,回到本例的需求上来分析,如果我们需要操作mysql数据库只需要在dao这个bean中引用bean_id为myConnection1的bean,同理SqlServer则引用myConnection2

  本篇博客到此结束,如果想继续深入理解IOC的朋友欢迎大家阅读下篇自己动手写spring IOC框架

时间: 2024-10-26 07:53:51

轻松理解spring IOC的相关文章

如何理解Spring IOC

学习过spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.开涛对Ioc的讲解 原文  开涛的博客 1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将

深入理解Spring IOC

转载自 http://www.cnblogs.com/xdp-gacl/p/4249939.html 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring

Spring:源码解读Spring IOC原理

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

Spring?IOC设计原理解析:本文乃学习整理参考而来

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

Spring IOC源码详解之容器依赖注入

Spring IOC源码详解之容器依赖注入 上一篇博客中介绍了IOC容器的初始化,通过源码分析大致了解了IOC容器初始化的一些知识,先简单回顾下上篇的内容 载入bean定义文件的过程,这个过程是通过BeanDefinitionReader来完成的,其中通过 loadBeanDefinition()来对定义文件进行解析和根据Spring定义的bean规则进行处理 - 事实上和Spring定义的bean规则相关的处理是在BeanDefinitionParserDelegate中完成的,完成这个处理需

Spring:源码解读Spring IOC原理--(转载)

转自:http://www.cnblogs.com/ITtangtang/p/3978349.html 这篇文章个人觉得整理的很不错,很值得学习,为了方便自己学习和大家学习,特转载此文保留.请尊重原创~~ Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileS

Spring IOC原理解读 面试必读

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

Spring IOC源代码具体解释之容器依赖注入

Spring IOC源代码具体解释之容器依赖注入 上一篇博客中介绍了IOC容器的初始化.通过源代码分析大致了解了IOC容器初始化的一些知识.先简单回想下上篇的内容 加载bean定义文件的过程.这个过程是通过BeanDefinitionReader来完毕的.当中通过 loadBeanDefinition()来对定义文件进行解析和依据Spring定义的bean规则进行处理 - 其实和Spring定义的bean规则相关的处理是在BeanDefinitionParserDelegate中完毕的,完毕这个

Spring IoC详解

Spring IoC详解 1. 控制反转 控制反转是一种通过描述(XML或者注解)并通过第三方去产生或获取特定对象的方式.在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection, DI). 它最大的好处是降低对象之间的耦合度,在一个系统中有哪些类,具体如何实现并不需要去理解,只需要知道它有什么用就可以.只是这里对象的产生依赖于IoC 容器,而不是开发者主动的行为.主动创建的模式,责任归于开发者,而在被动模式下,责任归于IoC容器,基于这样的被动