zoukankan      html  css  js  c++  java
  • 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=""):最终通知,无论是否有异常都会执行。

  • 相关阅读:
    day⑥:logging模块
    day⑥:shelve模块
    day⑥:xml模块
    day⑤:冒泡排序
    day⑤:模块
    day⑤:re深入
    day④:递归
    day④:迭代器
    day④:装饰器
    day③:函数式编程
  • 原文地址:https://www.cnblogs.com/zy-Luo/p/11033219.html
Copyright © 2011-2022 走看看