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)的技术促进了 ...
随机推荐
- web系统之session劫持解决
session劫持是一种比较复杂的攻击方法.大部分互联网上的电脑多存在被攻击的危险.这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持 可能. 两台主机要想进行TCP通信,必须经过一个三 ...
- sql2008安装时提示重启计算机失败解决方法
安装sql 2008的时候,在检测安装环境中有一项是”重新启动计算机”显示的结果是“失败”.上网看了半天,找到了解决方案,虽然我没弄明白具体原因,但问题是解决了,解决方案如下: 一.Windows+R ...
- spoj 1108
要求输出一个牌的顺序 使每隔1.2.......n翻牌后出现1 2 3 4 5 6 7 8 9 .... n 将牌想象成n个空格 正向推 空n个位置放n 循环 需优化 #include <io ...
- React-Native学习指南
React-Native学习指南 本指南汇集React-Native各类学习资源,给大家提供便利.指南正在不断的更新,大家有好的资源欢迎Pull Requests! 同时还有Awesome React ...
- linux设置和查看环境变量的方法
1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" ...
- Play Framework 2.2.6 安装
网络上很多安装方法都是互相复制黏贴的, 都没有人考虑到启动application 还有依赖很多jar 包,而其中typesafe 官网提供的只是一个mini的 启动器来安装,很慢,所以以下下载完整包. ...
- 转:UGUI与NGUI的区别与优缺点
1. NGUI与UGUI的区别 1) uGUI的Canvas 有世界坐标和屏幕坐标 2) uGUI的Image可以使用material 3) UGUI通过Mask来裁剪,而NGUI通过Pa ...
- cv 论文(CNN相关)
最近发现很多以前看的论文都忘了,所以想写点东西来整理下之前的paper,paper主要是cv(computer vision)方向的. 第一篇:Gradient-based learning appl ...
- PowerDesigner技巧
原文:PowerDesigner技巧 1.PowerDesigner使用MySQL的auto_increment ◇问题描述: PD怎样能使主键id使用MySQL的auto_increment呢? ...
- Java API —— TreeMap类
1.TreeMap类概述 键是红黑树结构,可以保证键的排序和唯一性 2.TreeMap案例 TreeMap<String,String> T ...