Ioc原理讲解:http://www.cnblogs.com/xdp-gacl/p/4249939.html

Ioc

  IoC是一种编程思想,由主动编程变为被动接收。

  也就是说,所有的组件都是被动的(passive),所有的组件初始化和调用都由容器负责。组件处在一个容器中,由容器负责管理。

  Ioc容器实现了对象的生命周期管理,降低了组件间的耦合度,将耦合推迟到了配置文件中,实现了软件各层间的解耦。

Ioc控制反转

  控制的内容:

    指谁来控制对象的创建,传统的应用程序对象的创建是由程序本身控制的。使用Spring后,是由Spring容器来创建对象的。

  反转:

    正转指程序本身来创建,反转指程序本身不去创建对象,而变为被动接收的对象。

  总结:

    控制反转--别名(依赖注入)

        依赖注入--Dependency Injection
          依赖:指bean对象创建依赖于容器。Bean对象的依赖资源
          注入:指bean对象依赖的资源由容器来设置和装配

    以前对象是由程序本身来创建,使用Spring后,程序变为被动接收Spring创建好的对象。

    即应用本身不负责依赖对象的创建及维护,而是由外部容器负责,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

Spring Ioc搭建

  

Ioc应用

  1.项目数据库的切换

 <?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: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="userdao_mysql" class="dao.UserDaoMysqlImpl"/>
<bean id="userdao_oracle" class="dao.UserDaoOracleImpl"/>
</beans>

applicationContext.xml

 package test;

 import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext; import dao.UserDao; public class Test {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao_mysql = (UserDao)factory.getBean("userdao_mysql");
userDao_mysql.add();
UserDao userDao_oracle = (UserDao)factory.getBean("userdao_oracle");
userDao_oracle.add();
}
}

Test.java

  

  2.类初始化赋值

    

    

 <?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: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="user" class="entity.User">
<property name="name" value="Tom2"/> <!-- 集合 -->
<property name="users">
<list>
<value>Zhengbin1</value>
<value>Zhengbin2</value>
</list>
</property>
</bean> <!-- ref 用来引用类
一个 教师 负责多个 学生 -->
<bean id="teacher" class="entity.Teacher">
<property name="user" ref="user"/>
</bean>
</beans>

applicationContext.xml

 package test;

 import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext; import entity.Teacher;
import entity.User; public class Test1 {
public static void main(String[] args) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
User u = (User)beanFactory.getBean("user");
System.out.println(u.getName());
System.out.println(u.getUsers()); Teacher t = (Teacher)beanFactory.getBean("teacher");
System.out.println(t.getUser().getName());
}
}

Test1.java

  输出:

    

  

  3.Ioc的类初始化与单例模式

    

    

 <?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: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"> <!-- scope 定义bean是否是单例
如果为 singleton 则在 BeanFactory 作用范围内,只维护此Bean的一个实例
如果为 prototype(原型) 则在 BeanFactory 将为每次Bean请求创建一个新的Bean实例 -->
<bean id="clazz" class="entity.Clazz" lazy-init="true" scope="prototype">
<property name="name" value="zhengbin"/>
</bean>
</beans>

applicationContext.xml

 package test;

 import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext; import entity.Clazz; public class Test2 {
public static void main(String[] args) {
// Spring 默认情况下,在读取配置文件时,已经完成创建对象,提高了系统性能
BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("--------------");
Clazz c = (Clazz)beanFactory.getBean("clazz");
Clazz c1 = (Clazz)beanFactory.getBean("clazz");
System.out.println(c.getName());
System.out.println(c1.getName());
System.out.println(c==c1);
c.setName("ZhengBin");
System.out.println(c.getName() + "----" + c1.getName());
}
}

Test2.java

  

  

Spring学习之Ioc的更多相关文章

  1. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

  2. Spring学习之Ioc控制反转(2)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

  3. Spring学习笔记IOC与AOP实例

    Spring框架核心由两部分组成: 第一部分是反向控制(IOC),也叫依赖注入(DI); 控制反转(依赖注入)的主要内容是指:只描述程序中对象的被创建方式但不显示的创建对象.在以XML语言描述的配置文 ...

  4. Spring 学习笔记 IoC 基础

    Spring IoC Ioc 是什么 IoC -- Inversion of Control(控制反转)什么是控制?什么是反转? 控制反转了什么? 在很早之前写项目不用 Spring 的时候,都是在 ...

  5. [跟我学spring学习笔记][IoC]

    IoC基础 什么是IoC Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. ioc做什么 IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找 ...

  6. spring学习(一) ———— IOC讲解

    spring基本就两个核心内容,IOC和AOP.把这两个学会了基本上就会用了. --WH 一.什么是IOC? IOC:控制反转,通俗点讲,将对象的创建权交给spring,我们需要new对象,则由spr ...

  7. spring 学习 二 IOC/DI

    中文名称:控制反转 英文名称:( Inversion of Control ) 1 控制反转作用: 一般在编写java程序时,需要程序员自己创建对象的实例,例如 A a=new A();语句,就是程序 ...

  8. Spring学习二----------IOC及Bean容器

    © 版权声明:本文为博主原创文章,转载请注明出处 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的 ...

  9. Spring学习之==>IoC

    一.概述 Spring的三大核心思想:IoC(控制反转),DI(依赖注入),AOP(面向切面编程).本问讲着重介绍一下控制反转. 何谓控制反转:Spring 通过一种称作控制反转(IoC)的技术促进了 ...

随机推荐

  1. 浅析白盒审计中的字符编码及SQL注入

    尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...

  2. jquerymobile局部渲染的各种刷新

    在JQueryMobile页面在第一次初始化进行一次整体渲染,动态生成的需要局部渲染. 在jquerymobile实现listview局部渲染的方法: function queryPublishOrd ...

  3. Unity3D TestTool Part _1

    一直想看看Unity3d官方推出的UnityTestTools的测试插件,今天有空尝试了一下. 一.Quick Start 1. create a plane position which trans ...

  4. java基础知识回顾之java Socket学习(一)--UDP协议编程

    UDP传输:面向无连接的协议,不可靠,只是把应用程序传给IP层的数据报包发送出去,不保证发送出去的数据报包能到达目的地.不用再客户端和服务器端建立连接,没有超时重发等机制,传输速度快是它的优点.就像寄 ...

  5. crontab定时运行git命令 更新代码库

    Q:  http://stackoverflow.com/questions/7994663/git-push-via-cron    I'm trying to run a git push fro ...

  6. cojs 疯狂的求和问题 解题报告

    QAQ 好久不在cojs上出题了 最近学了点新科技,于是就做成题来分享了 这道题是要求simga(i^k) 那么就先说说部分分的算法吧: 10分: 直接暴力就可以了,时间复杂度O(nlogk) 30分 ...

  7. lintcode :最大子数组

    题目:  最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 ...

  8. lintcode 中等题:Letter Combinations of a Phone Number 电话号码的字母组合

    题目 电话号码的字母组合 给一个数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合. 下图的手机按键图,就表示了每个数字可以代表的字母. 样例 给定 "23" 返回 [& ...

  9. springmvc图片上传

    //-------------------------------------上传图片--------------------------------------------------- @Requ ...

  10. Apache 下SVN项目管理使用说明

    Apache 下SVN项目管理使用说明 (1)Apaceh和SVN先要装好. (2)在apache的目录下找到httpd.conf文件,在最后一行增加如下配置 Include conf/svn.pro ...