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一样,先学会从第一步配置,再学会怎么用,最终再来精通框架源代码原理等等。

 

网站地图xml地图