Spring入门导读——IoC和AOP

和MyBatis系列不同的是,在正式开始Spring入门时,我们先来了解两个关于Spring核心的概念,IoC(Inverse of Control)控制反转和AOP()面向切面编程。

1.IoC(Inversion of Control)控制反转

什么是控制反转呢?可以这么通俗的来解释,我们通常写代码当一个类会关联另一个类是会直接在这个类里new,例如:

 1 package day_30_spring;
 2
 3 /**
 4  * @author 余林丰
 5  *
 6  * 2016年10月30日
 7  */
 8 public class People {
 9     private Eat eat;
10
11     /**
12      * 在构造方法中创建Eat的对象实例
13      */
14     public People(){
15         eat = new Eat();
16     }
17
18 }

现在我们将对象的控制权“反转”,交由第三方容器进行管理,即交由Spring容器帮我们管理,使得我们不再People代码中与Eat对象紧耦合。在看下面的代码:

 1 package day_30_spring;
 2
 3 /**
 4  * @author 余林丰
 5  *
 6  * 2016年10月30日
 7  */
 8 public class People {
 9     private Action eat;
10
11     /**
12      * 在构造方法中创建Eat的对象实例
13      */
14     public People(Action eat){
15         this.eat = eat;
16     }
17
18 }

Eat类是继承至Action接口的,这实际上就是通过依赖注入(DI,Dependency Inversion)的方式来实现控制反转。通过构造方法来注入。不依赖于具体的Action接口实现,我们只需要传递一个Action接口类进去即可。相比于之前的“传统”代码紧紧的依赖Action的具体实现Eat类,这个代码实际上解了代码的耦合性。Spring有两种构造方式,一种就是我们上面说到的构造器注入,另一种就是set方法注入。所以,IoC的很简单,目的是解耦,手段是通过依赖注入。Spring容器帮我们解决了一切。

2.AOP(Aspect Oriented Programming)面向切面编程

那什么又是面向切面编程呢?如果你有了解过代理模式,那么就对AOP比较容易理解了,AOP的原理实际上也是通过动态代理的方式实现的。我们来看下面这个例子:对数据库的操作前会有日志记录,对数据库的操作完后也会有日志记录,“通常”我们可能会这么写。

 1 package day_30_spring;
 2
 3 /**
 4  * @author 余林丰
 5  *
 6  * 2016年10月30日
 7  */
 8 public class People {
 9     private Logger logger = new Logger();
10
11     public void insert(int i){
12         logger.beforeInsert();    //插入前的日志记录
13         //此处插入一条数据
14         logger.afterInsert();    //插入后的日志记录
15     }
16 }

“单一职责”告诉我们,这样写到底好不好呢?日志记录是People该做的事吗?难道它不应该只负责插入数据的操作吗?正确的做法应该是这么的在People类中只有这几句代码:

 1 package day_30_spring;
 2
 3 /**
 4  * @author 余林丰
 5  *
 6  * 2016年10月30日
 7  */
 8 public class People {
 9
10     public void insert(int i){
11         //此处插入一条数据
12     }
13 }

那我们怎么在insert方法中先记录日志呢?我们可以用动态代理来实现,即创建一个代理类的对象实例,Spring也已经为我们做好了这件事,仅仅需要配置一下几句话,即可实现。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans>
 3     <!-- 省略其他配置,只配置aop -->
 4     <aop:config>
 5         <aop:aspect ref="logger">
 6             <aop:pointcut id="insert" expression="execution(* *.insert(..))"/>
 7             <aop:befor point-ref="insert" method="beforeInsert"/>
 8             <aop:after point-ref="insert" method="afterInsert"/>
 9         </aop:aspect>
10     </aop:config>
11 </beans>

事实上我们能实现最开始我们“糟糕”代码的功能了,而且更优美。在这里我们仅仅对IoC和AOP做一个简单的了解,在后面会和MyBatis一样,先学会从第一步配置,再学会怎么用,最后再来了解框架源代码原理等等。

时间: 2024-10-21 17:40:40

Spring入门导读——IoC和AOP的相关文章

Spring中的IOC和AOP

一.IOC(DI) Inversion of Control 控制反转,也叫(Dependency Injection)依赖注入. 我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经不知不觉的和 new的对象耦合了,而我们通常都是更高层次的抽象模块调用底层的实现模块,这样也就产生了模块依赖于具体的实现,这样与我们JAVA中提倡的面向接口面向抽象编程是相冲突的,而且这样做也带来系统的模块架构问题. 很简单的例子,我们在

Spring入门系列-IOC

什么是Spring Spring概述(了解) Spring是什么 Spring是JavaEE应用 full-stack轻量级开源框架,核心是:IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架. 什么是一站式开

Spring入门和IOC

本节要点: Spring简介 Spring特点 Spring框架组成 IOC和DI概念 项目中如何引入Spring框架 1 spring简介  spring:春天,寓意给软件行业带来了春天,由Rod Johnson提出 提出目的:解决企业应用开发的复杂性. 作用范围:任何Java应用 . 提出理念:使现有的技术更加实用,不去重复造轮子,让现有的框架运用更加合理.Struts和hibernate没有任何联系,所有spring最初的目的就是联系struts和hibernate,让他们运用的更好,本身

对Spring中的IOC与AOP简单理解(简单的理解,通俗易懂)

IOC与AOP是Spring中的核心:IOC是控制反转,AOP是面向对象编程,IOC采用了工厂设计模式,AOP采用了代理设计模式. 一.IOC IOC是控制反转,而控制反转是一种思想,而DI是依赖注入,是IOC的实现,DI有构造注入.属性注入(设值注入)(基于注解的方式或者基于XML的方式).在项目程序中,频繁的去手动创建对象,new对象使得代码间耦合度太大,而Spring提供了容器,通俗的讲:你无需知道对象的创建过程,只需从其中拿到结果就可以了:把对象的创建以及各个对象间的关系还有对象的销毁交

Spring入门(三)— AOP注解、jdbc模板、事务

一.AOP注解开发 导入jar包 aop联盟包. aspectJ实现包 . spring-aop-xxx.jar . spring-aspect-xxx.jar 导入约束 aop约束 托管扩展类和被扩展类 <!-- 要做AOP, 一定要托管扩展类和被扩展类 --> <bean id="us" class="com.pri.service.impl.UserServiceImpl"></bean> <bean id="

Spring入门 (IOC)

1.实现原理 IOC:控制反转,指的是对象创建权反转(交给)Spring,作用是实现了程序的解耦合. 2.实现步骤 (1)    下载jar包(参见开发库/spring) (2)    创建web项目,导入jar包 (3)    书写配置文件,并注册对象到容器中 Xml文件名字与位置任意,建议放到src目录下起名为aoolicationContext.xml Xml中注册对象: (4)测试代码 3.Spring创建对象的三种方式(Bean创建方式) (1)工厂类: (2)配置文件: (3)   

Spring核心技术之IoC和AOP

IOC: IoC,即控制反转,就是有容器控制程序之间的关系,而非传统实现中,由程序代码直接用new实现.控制权由应用代码中转到了外部容器,因此称作控制反转.IoC又称DI,依赖注入,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,也就是由容器动态的将某种依赖关系注入到组件之中(系统开机,USB设备加载,运行在计算机中的Win OS依赖USB设备进行数据存取,然后写入win文件访问组件) 在一个业务类中,如果要用到ClassA,是不是要new一个ClassA对象?这个就等于是业务类主动的去创

Spring框架的IoC和AOP

答: IoC:控制反转,在现在的开发中,如果想建 立对象并设置属性,是需要先new对象,再通过setter或构造方法设置属性.而使用Spring的IoC后,则是先通过配置声明属性的值或关系,再通过Spring框架建立对象,建立好的对象中就自动设置好了配置的属性.此功能可以替代工厂类.在IoC 中还提出了DI(依赖注入),表示将一个Spring中配置好的类,设置到另一个Spring配置的类中,作为属性使用.//实现的原理仍然是使用反射,仍然是先建立对象再设置属性.工厂类的缺点是写一个实现类就要加一

理解Spring中的IOC和AOP

我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式 IOC就是典型的工厂模式,通过sessionfactory去注入实例. AOP就是典型的代理模式的体现. 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关