Spring---AOP

AOP:面向切面编程,AOP是OOP(面向对象)的拓展和延伸。

1.Spring底层的AOP实现原理

动态代理
     JDK动态代理: 只能对实现了接口的类产生代理。
     Cglib动态代理:可以对没有实现接口的对象产生代理,生成子类。
Spring在你实现了接口的类,会使用JDK代理,没有实现使用Cglib代理,自动更换

2.Spring的AOP的开发入门(XML文件配置)

       1.建项目,导包。
        

       2.在src下新建applicationContext.xml配置文件,并引入约束 

//applicationContext.xml
<?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:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd"> 


</beans>

       3.编写测试类,并做相应的配置

       4.测试,这里使用Spring和JUnit的整合进行测试。需要导入spring-test-4.2.4.RELEASE.jar包
         

3.Spring的AOP开发的通知类型

     1.前置通知:在切点之前执行,可以获得切点信息
        

     2.后置通知:可以获得切点的返回值  

     3.环绕通知:环绕通知可以控制切点函数是否执行
       

     4.异常通知
        当有异常发生是执行的通知,使用<aop:after-throwing method=""/>配置切面,可获得异常信息,切面函数的参数名必须和xml中的throwing相同

     5.最终通知
        和代码中的finally块相似,切点执行完毕后最终执行的通知,使用<aop:after method=""/>配置

4.Spring切入点表达式的写法

       语法:[访问修饰符] 方法返回值 包名.类名.方法名(参数),,,,访问修饰符可以不要,是基于execution函数完成的,返回值,包名,类名等全都可以用*表示(代表任意)
      

5.Spring的AOP的注解的入门

      使用注解实现AOP开发所需的包和使用XML实现是一样的,操作也差不多,把目标类和切面类交给Spring管理,只是切点的定义是通过加注解实现的,以及在xml文件中配置<aop:aspectj-autoproxy/>开启AOP注解的使用。
    ​      

     AOP注解开发的通知类型

            1.@Before(value="") :前置通知

            2.@AfterReturning(value="",returning=""):后置通知,returning表示返回值。用法和xml中一样

            3.@Around(value=""):环绕通知,切面方法也需要一个ProceedingJoinPoint类型的参数

            4.@AfterThrowing(value="",throwing=""):参数throwing的用法和xml中的一样

            5.@After(value=""):最终通知,无论是否有异常都会执行。

原文地址:https://www.cnblogs.com/zy-Luo/p/11033219.html