码迷,mamicode.com
首页 > 编程语言 > 详细

Spring4--课程笔记6

时间:2017-02-03 19:56:27      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:.so   nts   target   result   tin   运行   spring4   pac   div   

Spring与AOP:

  AOP的引入:

    主业务经常需要调用系统级业务(交叉业务),如果在主业务代码中大量的调用系统级业务代码,会使系统级业务与主业务深度耦合在一起,大大影响了主业务逻辑的可读性,降低了代码的可维护性,同时也增加了开发难度。

    所以,可以采用动态代理方式。动态代理是 OCP 开发原则的一个重要体现:在不修改主业务逻辑的前提下,扩展和增强其功能。

 1 package com.tongji.test;
 2 
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Method;
 5 import java.lang.reflect.Proxy;
 6 
 7 import org.junit.Test;
 8 
 9 import com.tongji.service.ISomeService;
10 import com.tongji.service.SomeServiceImpl;
11 import com.tongji.utils.SomeUtils;
12 
13 public class MyTest {
14     @Test
15     public void test01() {
16         final ISomeService target = new SomeServiceImpl();
17         ISomeService proxy = (ISomeService) Proxy.newProxyInstance(
18                         target.getClass().getClassLoader(), 
19                         target.getClass().getInterfaces(), 
20                         new InvocationHandler() {
21                             
22                             //织入:交叉业务逻辑切入到主业务中,就在这里完成的
23                             @Override
24                             public Object invoke(Object proxy, Method method, Object[] args)
25                                     throws Throwable {
26                                 SomeUtils.doTransaction();
27                                 Object result = method.invoke(target, args);
28                                 SomeUtils.doLog();
29                                 return result;
30                             }
31                         });
32         proxy.doSome();
33         proxy.doSecond();
34     }
35 }

  

  AOP简介:

    AOP(Aspect Orient Programming),面向切面编程,是面向对象编程 OOP 的一种补充。

    面向对象编程是从静态角度考虑程序的结构,而面向切面编程是从动态角度考虑程序运行过程AOP 底层,就是采用动态代理模式(代理模式见此链接)实现的。采用了两种代理:JDK 的动态代理,与 CGLIB的动态代理。
    面向切面编程,就是将交叉业务逻辑封装成切面,利用 AOP 容器的功能将切面织入到主业务逻辑中。所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全检查、事务、日志等。
    若不使用 AOP,则会出现代码纠缠,即交叉业务逻辑与主业务逻辑混合在一起。这样,会使主业务逻辑变的混杂不清。
     例如,转账,在真正转账业务逻辑前后,需要权限控制、日志记录、加载事务、结束事务等交叉业务逻辑,而这些业务逻辑与主业务逻辑间并无直接关系。但,它们的代码量所占比重能达到总代码量的一半甚至还多。它们的存在,不仅产生了大量的“冗余”代码,
还大大干扰了主业务逻辑---转账。

    AOP编程术语:

      (1)切面(Aspect)
        切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面有通知与顾问。实际就是对主业务逻辑的一种增强。
      (2)织入(Weaving)
        织入是指将切面代码插入到目标对象的过程。上例中 invoke()方法完成的工作,就可以称为织入。
      (3)切入点(Pointcut)
        切入点指切面具体织入的位置。在 StudentServiceImpl 类中,若 doSome()将被增强,而doOther()不被增强,则 doSome()为切入点,而 doOther()仅为连接点被标记为 final 的方法是不能作为连接点与切入点的。因为最终的是不能被修的,不能被增强的。

      (4)目标对象(Target)
        目标对象指将要被增强的对象。即包含主业务逻辑的类的对象。上例中的StudentServiceImpl 的对象若被增强,则该类称为目标类,该类对象称为目标对象。当然,不被增强,也就无所谓目标不目标了。
      (5)通知(Advice)
        通知是切面的一种实现,可以完成简单织入功能(织入功能就是在这里完成的)。换个角度来说,通知定义了增强代码切入到目标代码的时间点,是目标方法执行之前执行,还是之后执行等。通知类型不同,切入时间不同。切入点定义切入的位置,通知定义切入的时间。  
      (6)顾问(Advisor)
        顾问是切面的另一种实现,能够将通知以更为复杂的方式织入到目标对象中,是将通知包装为更复杂切面的装配器

Spring4--课程笔记6

标签:.so   nts   target   result   tin   运行   spring4   pac   div   

原文地址:http://www.cnblogs.com/qjjazry/p/6363300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!