Spring三大核心思想一:IOC
2017-08-09 13:11
447 查看
首先,spring最核心,最基础的概念是什么?将spring类比java,java最核心,最基础的概念就是object了。java中,所有的操作都是针对object的(基础类型除外),java中,一切皆对象,一切都是object。类比下来,spring中最基础的概念是bean。在spring中,所以的类都可以认为是一个bean。(个人认为)在spring中的所有文件,都可以认为是注册了的bean和未注册的bean。 spring中所有操作都是针对bean的操作。自然,spring的三大核心思想中操作的对象,也是bean。
spring三大核心思想之一:IOC,控制反转。
想理解什么叫控制反转,首先要理解什么叫控制没有反转。
看下面代码:
首先有一个接口类:
Java代码
package testSpring.business.iface;
/**
* INetPlay : 打印接口,对象需要实现这个接口来实现打印该对象的功能
*
* @author xuejupo jpxue@travelsky.com
*
* create in 2016-2-16 上午9:16:52
*/
public interface IPrint {
/**
* onLine: 对象需要实现这个方法来实现打印对象的功能
* void 返回类型
*/
String printObject();
}
然后有两个实现类:
Java代码
package testSpring.business.bean;
import org.springframework.stereotype.Repository;
import testSpring.business.iface.IPrint;
/**
* UserBean :
* @author xuejupo jpxue@travelsky.com
* create in 2016-2-16 上午9:22:39
*/
public class UserBean implements IPrint{
@Override
public String printObject() {
// TODO Auto-generated method stub
System.out.println("打印对象UserBean:");
return "abc";
}
}
Java代码
package testSpring.business.bean;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Service;
import testSpring.business.iface.IPrint;
/**
* MyBean :
* @author xuejupo jpxue@travelsky.com
* create in 2016-2-16 上午10:11:43
*/
public class MyBean implements IPrint{
@Override
public String printObject() {
// TODO Auto-generated method stub
System.out.println("打印对象MyBean:");
return null;
}
}
现在,我想打印第一个实现类,客户端代码如下:
Java代码
IPrint print = new UserBean();
print.printObject();
很简单的代码,这时候对第二个实现类UserBean对象的创建,是由客户端完成的。相当于客户端控制着UserBean对象的创建。代码自然没什么问题,执行结果如下:
Java代码
打印对象UserBean:
很正常的执行结果。但是这时候我想修改一下,打印第二个实现类,这时候就需要修改代码了。对于正式的系统来说,修改代码毕竟是不符合开闭原则,又比较麻烦的事。所以就想能不能用配置文件来代替代码的修改。这时候就需要用到spring的控制反转:对继承了接口IPrint的具体实现类的具体对象的创建,不依赖于调用他的客户端代码,而将控制权交给spring(其实就是xml文件),这就是控制反转。
下面是xml文件(注册bean,将):
Java代码
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 注册bean --!>
<bean id="userBean" class="testSpring.business.bean.UserBean" />
</beans>
其中,文件头那一大坨类似网址的东西,我没测试过是啥,网上说是spring的标签规范检验文件的路径。首先他会查找你本地的标签规范文件(一般都有),如果本地没找到就会到他的url里面去找。
测试代码如下:
Java代码
//读取配置文件(将配置文件中的bean加载进内存)
ApplicationContext ctx = new ClassPathXmlApplicationContext("/testSpring/resources/applicationContext.xml");
//获取的实例
IPrint bean=(IPrint)ctx.getBean("userBean");
//调用方法
bean.printObject();
结果:
Java代码
打印对象UserBean:
如果想要打印另一个实现类,只要修改配置文件:
Java代码
<bean id="userBean" class="testSpring.business.bean.MyBean" />
结果:
Java代码
打印对象MyBean:
很简单,将控制权交到spring的xml文件中。
spring三大核心思想之一:IOC,控制反转。
想理解什么叫控制反转,首先要理解什么叫控制没有反转。
看下面代码:
首先有一个接口类:
Java代码
package testSpring.business.iface;
/**
* INetPlay : 打印接口,对象需要实现这个接口来实现打印该对象的功能
*
* @author xuejupo jpxue@travelsky.com
*
* create in 2016-2-16 上午9:16:52
*/
public interface IPrint {
/**
* onLine: 对象需要实现这个方法来实现打印对象的功能
* void 返回类型
*/
String printObject();
}
然后有两个实现类:
Java代码
package testSpring.business.bean;
import org.springframework.stereotype.Repository;
import testSpring.business.iface.IPrint;
/**
* UserBean :
* @author xuejupo jpxue@travelsky.com
* create in 2016-2-16 上午9:22:39
*/
public class UserBean implements IPrint{
@Override
public String printObject() {
// TODO Auto-generated method stub
System.out.println("打印对象UserBean:");
return "abc";
}
}
Java代码
package testSpring.business.bean;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Service;
import testSpring.business.iface.IPrint;
/**
* MyBean :
* @author xuejupo jpxue@travelsky.com
* create in 2016-2-16 上午10:11:43
*/
public class MyBean implements IPrint{
@Override
public String printObject() {
// TODO Auto-generated method stub
System.out.println("打印对象MyBean:");
return null;
}
}
现在,我想打印第一个实现类,客户端代码如下:
Java代码
IPrint print = new UserBean();
print.printObject();
很简单的代码,这时候对第二个实现类UserBean对象的创建,是由客户端完成的。相当于客户端控制着UserBean对象的创建。代码自然没什么问题,执行结果如下:
Java代码
打印对象UserBean:
很正常的执行结果。但是这时候我想修改一下,打印第二个实现类,这时候就需要修改代码了。对于正式的系统来说,修改代码毕竟是不符合开闭原则,又比较麻烦的事。所以就想能不能用配置文件来代替代码的修改。这时候就需要用到spring的控制反转:对继承了接口IPrint的具体实现类的具体对象的创建,不依赖于调用他的客户端代码,而将控制权交给spring(其实就是xml文件),这就是控制反转。
下面是xml文件(注册bean,将):
Java代码
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 注册bean --!>
<bean id="userBean" class="testSpring.business.bean.UserBean" />
</beans>
其中,文件头那一大坨类似网址的东西,我没测试过是啥,网上说是spring的标签规范检验文件的路径。首先他会查找你本地的标签规范文件(一般都有),如果本地没找到就会到他的url里面去找。
测试代码如下:
Java代码
//读取配置文件(将配置文件中的bean加载进内存)
ApplicationContext ctx = new ClassPathXmlApplicationContext("/testSpring/resources/applicationContext.xml");
//获取的实例
IPrint bean=(IPrint)ctx.getBean("userBean");
//调用方法
bean.printObject();
结果:
Java代码
打印对象UserBean:
如果想要打印另一个实现类,只要修改配置文件:
Java代码
<bean id="userBean" class="testSpring.business.bean.MyBean" />
结果:
Java代码
打印对象MyBean:
很简单,将控制权交到spring的xml文件中。
相关文章推荐
- (四)Spring核心思想 - IOC与DI
- Spring IoC与AOP的核心思想(转载)
- Spring IoC与AOP的核心思想
- Spring三大核心思想之二:DI
- Spring的三大核心思想
- Spring三大核心思想学习笔记
- Spring三大核心思想之三:AOP
- Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧)
- Spring IoC与AOP的核心思想
- spring IOC核心源码:容器创建过程
- spring核心思想理解(借鉴收藏)
- Spring核心机制--IoC
- Spring核心(ioc控制反转)
- Spring核心——IOC处理器扩展
- Spring ioc及aop思想
- 不明觉厉的spring(2)---spring核心容器及ioc
- Spring核心概念之Ioc
- Spring3核心技术之IOC控制反转