Spring学习之Ioc
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的更多相关文章
- Spring学习之Ioc控制反转(1)
开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...
- Spring学习之Ioc控制反转(2)
开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...
- Spring学习笔记IOC与AOP实例
Spring框架核心由两部分组成: 第一部分是反向控制(IOC),也叫依赖注入(DI); 控制反转(依赖注入)的主要内容是指:只描述程序中对象的被创建方式但不显示的创建对象.在以XML语言描述的配置文 ...
- Spring 学习笔记 IoC 基础
Spring IoC Ioc 是什么 IoC -- Inversion of Control(控制反转)什么是控制?什么是反转? 控制反转了什么? 在很早之前写项目不用 Spring 的时候,都是在 ...
- [跟我学spring学习笔记][IoC]
IoC基础 什么是IoC Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. ioc做什么 IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找 ...
- spring学习(一) ———— IOC讲解
spring基本就两个核心内容,IOC和AOP.把这两个学会了基本上就会用了. --WH 一.什么是IOC? IOC:控制反转,通俗点讲,将对象的创建权交给spring,我们需要new对象,则由spr ...
- spring 学习 二 IOC/DI
中文名称:控制反转 英文名称:( Inversion of Control ) 1 控制反转作用: 一般在编写java程序时,需要程序员自己创建对象的实例,例如 A a=new A();语句,就是程序 ...
- Spring学习二----------IOC及Bean容器
© 版权声明:本文为博主原创文章,转载请注明出处 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的 ...
- Spring学习之==>IoC
一.概述 Spring的三大核心思想:IoC(控制反转),DI(依赖注入),AOP(面向切面编程).本问讲着重介绍一下控制反转. 何谓控制反转:Spring 通过一种称作控制反转(IoC)的技术促进了 ...
随机推荐
- 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数。
#include<stdio.h> #include<stdlib.h> int main() { setvbuf(stdout,NULL,_IONBF,); //使用Ecli ...
- node-firefox 二三事
编者按:本文作者为 Soledad Penadés, Sole 在 Mozilla 的 Tech Evangelism 团队工作,帮助人们在网络上创造神奇的东西.本文主要介绍node-firefox的 ...
- zabbix3.0 安装方法,一键实现短信、电话、微信、APP 告警
引言 免费开源监控工具 Zabbix 因其强大的监控功能得到各大互联网公司的广泛认可,具体功能不再详细介绍,在之前发布的 Zabbix 2.4.1 安装及微信短信提醒已经做了详细介绍,本篇主要对 Za ...
- POJ 1844
#include <iostream> #define MAXN 20 using namespace std; int value[MAXN]; int place[MAXN]; ]; ...
- C#的cs文件中Response.Clear();Response.ClearHeaders()的作用
在学习一个CS文件,如下:public partial class GetPic : System.Web.UI.Page{ protected void Page_Load(object se ...
- Eclipse安装SVN插件的方法( 手动安装)
Eclipse Svn 插件CSDN下载地址:http://download.csdn.net/source/3143260 手动安装: 1.在Eclipse根目录下建一个任意文件夹(如plugin ...
- error: ‘for’ loop initial declarations are only allowed in C99 mode
比如写出下面这段程序: for (int i = 0; i < n; ++i) do_something(); 然后用gcc编译,会报 ‘for’ loop initial declaratio ...
- 在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)
// 派生自CButton类,主要过滤WM_LBUTTONDOWN .WM_LBUTTONUP和WM_MOUSEMOVE消息. BOOL m_bFlag = FALSE; // 成员变量,用来标示鼠标 ...
- Android:利用SharedPreferences实现自动登录
主要代码: public class LoginActivity extends Activity { private EditText username; private EditText user ...
- SQLServer中服务器角色和数据库角色权限详解
角色 当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数 ...