spring三大核心学习(一)---控制反转
记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了。用spring的人越来越多,用struts的人比原来少多了,用hibernate的就更少了。毕竟现在it人才流动性太大了,招人上来上手很重要,谁知道他什么时候就跑了。。(hibernate太复杂了)。
我最近只看spring,所以只说spring。
记得当初面试的时候被问到过spring的三大核心思想。相信多数javaer都被问到过这个问题。绝大多数人应该都知道这三个核心思想是什么:控制反转,依赖注入和面向切面编程。
印象很深,因为当时对spring不熟,所以被面试官狠狠得鄙视了。。。这几天把这三个功能点复习一下。
以下内容全是个人理解(免责声明o(∩_∩)):
首先,spring最核心,最基础的概念是什么?将spring类比java,java最核心,最基础的概念就是object了。java中,所有的操作都是针对object的(基础类型除外),java中,一切皆对象,一切都是object。类比下来,spring中最基础的概念是bean。在spring中,所以的类都可以认为是一个bean。(个人认为)在spring中的所有文件,都可以认为是注册了的bean和未注册的bean。 spring中所有操作都是针对bean的操作。自然,spring的三大核心思想中操作的对象,也是bean。
spring三大核心思想之一:IOC,控制反转。
想理解什么叫控制反转,首先要理解什么叫控制没有反转。
看下面代码:
首先有一个接口类:
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();
}
然后两个实现类:
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";
}
}
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;
}
}
现在,我想打印第一个实现类,客户端代码如下:
IPrint print = new UserBean(); print.printObject();
很简单的代码,这时候对实现类UserBean对象的创建,是由客户端完成的。相当于客户端控制着UserBean对象的创建。代码自然没什么问题,执行结果如下:
打印对象UserBean:
很正常的执行结果。但是这时候我想修改一下,打印第二个实现类,这时候就需要修改代码了。对于正式的系统来说,修改代码毕竟是不符合开闭原则,又比较麻烦的事。所以就想能不能用配置文件来代替代码的修改。这时候就需要用到spring的控制反转:对继承了接口IPrint的具体实现类的具体对象的创建,不依赖于调用他的客户端代码,而将控制权交给spring(其实就是xml文件),这就是控制反转。
下面是xml文件(注册bean):
<?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里面去找。
测试代码如下:
//读取配置文件(将配置文件中的bean加载进内存)
ApplicationContext ctx = new ClassPathXmlApplicationContext("/testSpring/resources/applicationContext.xml");
//获取的实例
IPrint bean=(IPrint)ctx.getBean("userBean");
//调用方法
bean.printObject();
结果:
打印对象UserBean:
如果想要打印另一个实现类,只要修改配置文件:
<bean id="userBean" class="testSpring.business.bean.MyBean" />
理解起来应该算挺容易的,就是将创建哪个具体对象的控制权交到spring的xml文件中,这就是简单的控制反转了。
spring三大核心学习(一)---控制反转的更多相关文章
- spring最核心思想--ioc控制反转
一核心概念 控制反转:将bean的生成交给容器,程序可以从容器中获取指定的bean. 个人理解:此优势也是spring能够流行并成为java主流框架的主要原因,java是帮助java程序员以对象的方式 ...
- Spring专题2: DI,IOC 控制反转和依赖注入
合集目录 Spring专题2: DI,IOC 控制反转和依赖注入 https://docs.spring.io/spring/docs/2.5.x/reference/aop.html https:/ ...
- Spring是什么、spring容器、Spring三大核心思想DI(依赖注入)、IOC(控制反转)、AOP(面向切面编程)
1.Spring (1)Spring是什么? 是一个轻量级的.用来简化企业级应用开发的开发框架. 注: a.简化开发: Spring对常用的api做了简化,比如,使用Spring jdbc来访问数据库 ...
- Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)
一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.S ...
- Spring核心思想:“控制反转”,也叫“依赖注入” 的理解
@Service对应的是业务层Bean,例如: @Service("userService") public class UserServiceImpl implements Us ...
- Spring核心(ioc控制反转)
IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理. 其本质.即将控制权由应用程序代码转到了外部容器,控制权的转移就是 ...
- Spring学习02——控制反转、依赖注入
有两个人,张三和李四 package com.su.service; public class ZhangSan implements Tester{ public void test(){ Syst ...
- spring框架篇(一)-------spring简介与配置文件使用控制反转事例
spring简介 Spring 是一个开源框架,中文意思就是春天,也许是作者想让自己的这个框架给Java开发人员带来春天吧.其官方网站是 https://spring.io/ ,可以在官方网站下载到完 ...
- spring(一) IOC 控制反转 、DI 依赖注入
IOC 控制反转:创建对象的方式 变成了由Spring来主导 IOC底层原理:对象工厂 1.导入jar包:4个核心jar和1个依赖jar spring-beans-4.3.9.RELEASE.jar ...
随机推荐
- 栈的应用-四则表达式(C#代码实现)
->概念 中缀表达式 9+(3-1)*3+10/2 转换步骤 9 + 9 + ( 9 3 + ( - 9 3 1 + ( - ) 9 3 1 - + 9 3 1 - + * 9 3 1 - 3 ...
- Java异常处理中finally中的return会覆盖catch语句中的return语句
Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...
- Android平台NDK编程
转自:http://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2dx开发时,已经详细介绍了如何将win32的c++代 ...
- com.sun.image.codec.jpeg--导入报错
import com.sun.image.codec.jpeg; 这样导入的时候,总是报错:Only a type can be imported. com.sun.image.codec.jpeg ...
- 深入理解Oracle索引(25):一招鲜、吃遍天之单字段索引创建思路
本文较短.不过实用性很好.还是记录之. ㈠ 先别看SQL语句.看执行计划.挑出走全表扫的表 ㈡ 回头看SQL语句.分析上述表的约束字段有哪些.检查各个约束字段的索引是否存在 ㈢ 选择 ...
- 如何用C#语言构造蜘蛛程序
"蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载We ...
- BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
昨天公布了BackTrack5 (BT5)无线weppassword破解教程之minidwep-gtk破解法一文,对BT5下破解wep无线password的简单方法做了介绍,今天奶牛为朋友们介绍下怎样 ...
- Chrome 开发者工具使用技巧
最近我花了较多的时间使用 Chrome 的开发者工具.我发现了很多之前没用过的好功能 (或还不是特别需要用到的功能,例如 blackboxing 和 asynchronous stacktraces) ...
- 关于javascript中的 执行上下文和对象变量
什么是执行上下文 当浏览器的解释器开始执行我们的js代码的时候,js代码运行所处的环境可以被认为是代码的执行上下文,执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(e ...
- systemtap-与 oracle 转
https://baoz.net/using-systemtap/ http://nanxiao.me/category/%E6%8A%80%E6%9C%AF/systemtap-%E7%AC%94% ...