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框架

转载于:https://www.cnblogs.com/1016882435AIDA/p/5895480.html

轻松理解spring IOC相关推荐

  1. 深入理解Spring IOC和AOP

    文章目录 1. 什么是 Spring 框架? 1.1Spring简介 1.2Spring的好处 1.3Spring体系结构 2.理解Spring IoC 2.1IoC简介 2.2IoC的好处 2.3依 ...

  2. 抛弃隐晦,明了的理解Spring IOC与AOP

    IOC(反转控制) 一个java应用程序是有很多类组成的,这些类相互协作.相互作用来提供应用程序的表现行为.那些被其它类组合提供某些行为的类,称之为其它类的依赖(dependencies).利用软件工 ...

  3. 彻底理解Spring IOC和DI

    目录 前言 1. 分享Iteye的开涛对Ioc的精彩讲解 1.1 IoC是什么 1.2 IoC能做什么 1.3 IoC和DI 2. 分享Bromon的blog上对IoC与DI浅显易懂的讲解 2.1 I ...

  4. 用项目案例彻底理解Spring IOC容器

    本篇介绍Spring IOC容器,通过具体的实例详细地讲解IOC概念,彻底理解Spring反转控制的思想.通过本篇的学习,可以达成如下目标. ● 运用工厂模式设计程序 ● 理解JavaBean和POJ ...

  5. 从源码深入理解Spring IoC 注解

    全注解下的 Spring IoC 本文基于 Spring Boot,所以并不使用 XML 配置,使用注解描述生成对象 版权声明:本文为博主原创文章,未经博主允许不得转载. Ioc 容器简介 Sprin ...

  6. 深入理解Spring IoC的原理(转发)

    前言 本文转发自好好学java,作者:莫那·鲁道(点击蓝色字体即可跳转),本文有所修删改. 原作者的这篇文章对Spring IoC的实现原理讲的挺详细的.当然,也正因为如此,所以理解起来有些难度,估计 ...

  7. python ioc框架_轻松理解 Spring 中的 IOC

    Spring 简介 Spring 是一个开源的轻量级的企业级框架,其核心是反转控制 (IoC) 和面向切面 (AOP) 的容器框架.我们可以把 Spring 看成是对象的容器,容器中可以包含很多对象, ...

  8. 5 分钟一次理解 Spring IOC !

    今天我们分析一下 spring 的 IOC,梳理一下 IOC 和 DI 的概念与原理.在网上看到开涛有篇文章写的不错,提取其中一部分精华内容并做一些解读. 1.1.IOC是什么? Ioc-Invers ...

  9. 简述控制反转ioc_深度理解Spring IOC(控制反转)

    一.IOC概述 Inverse Of Controll即为控制反转,简称IOC . 简单来说,IOC反转了依赖关系的满足方式,由之前的自己创建依赖对象,变为由工厂推送.(变主动为被动,即反转)它解决了 ...

最新文章

  1. Chrome Full black Screen [Solved]
  2. Py之ipython:Python库之ipython的简介、安装、使用方法详细攻略
  3. 判断 iframe 是否加载完成的完美方法
  4. VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法
  5. 什么是 devops_DevOps对您意味着什么?
  6. PL/SQL(一)简介
  7. 自学如何去学习jQuery
  8. 编译FREETYPE:VS2010错误MSB8008
  9. Android9能用的flash播放器,flash player安卓4.4_安卓flash player 9.0_安卓adobe flash player 9...
  10. 供给、需求、有效供给、有效需求
  11. c语言怎么学自学,初学者如何学习c语言,带你玩转C语言
  12. 工作说明书SOW(Statement Of Work)
  13. 2013 中国15大云平台
  14. 64位处理器_计算机微处理器介绍
  15. R语言Fisher检验的workspace问题
  16. 数据中心的铜缆布线活力无限不过时
  17. 程序员薪水变化数据大曝光,哭着上班,笑着拿工资!
  18. 创建ITable不能更新记录的问题
  19. 基于neo4j构建西游记知识图谱
  20. 数据库课程设计《教务信息管理系统》

热门文章

  1. 给年轻人的30条忠告【转自[蓉儿]的QQ空间】
  2. 基于语言文件的asp.net全球化解决方案
  3. 解决WIN7远程登录提示无法保存凭据的问题
  4. 我的Notepad++环境配置
  5. android rild
  6. ruby之添加当前文件路径到$LOAD_PATH
  7. spring核心之AOP学习总结二
  8. Codeforces 67A【模拟】
  9. [android] AndroidManifest.xml【 manifest - permission-tree 和 manifest - permission-group】
  10. 最新微信公众平台js sdk整合PHP版