欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于AOP

程序员文章站 2022-04-25 15:48:28
...

AOP的核心思想

就是“将应用程序中的业务逻辑同对其提供支持的通用服务功能进行分离,而业务逻辑与通用服务功能之间通过配置信息,实现整合”

涉及的主要概念:

1、Aspect(“切面”或称为“方面”)

2、Joinpoint(连接点)

3、 Pointcut(切入点)

4、  Advice(通知)

5、 Target(目标对象)

6、  AOP Proxy(AOP代理)

7、 Weave(织入)

8、拦截机(Interceptor)

 

关于AOP

 

在原业务流程需要的位置“插入”所需要执行的功能方法,即动态的根据需要插入“某方法”运行,完成所要求得附加功能。这就是AOP的基本思想。

关于AOP

 

          第一部分,采用传统的设计思想与方法(OOP技术)。

          第二部分,采用AOP技术,然后将两部分织入整合即可。

 

导入AOP所需要的jar包

      在工程目录下,建立目录lib,将所需要的Jar包复制到lib下,并利用Eclipse中的bliudpath命令,将其部署到classpath路径下。

要导入的包有:

commons-logging-1.1.1.jar:日志处理包

spring-aop-4.1.6.RELEASE.jar :Spring AOP包

spring-aspects-4.1.6.RELEASE.jar:Spring 切面包

spring-beans-4.1.6.RELEASE.jar :Spring Bean管理包

spring-context-4.1.6.RELEASE.jar :Spring 注释等上下相关包

spring-core-4.1.6.RELEASE.jar :Spring 核心容器包

spring-expression-4.1.6.RELEASE.jar:Spring表达式包

 

还要配置bean.xml

关于AOP

 

我配置的一个实例

<?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">
     <aop:config>  
        <aop:aspect id="TestAspect" ref="aspectBean">  <!-- 引用的切面类 -->
            <!--配置service包下所有类或接口的所有方法-->  
            <aop:pointcut id="businessService" expression="execution(* service.*.*(..))" />  <!-- 通过表达式,指明操作的范围 -->           
            <aop:around pointcut-ref="businessService" method="doAround"/>  
            <aop:before pointcut-ref="businessService" method="doBefore"/>  
            <aop:after pointcut-ref="businessService" method="doAfter"/>  
            <aop:after-throwing pointcut-ref="businessService" method="doThrowing" throwing="ex"/>  
            <aop:after-returning  pointcut-ref="businessService" method="doAfterReturning" returning="result"/>
        </aop:aspect>  
    </aop:config>  
      
    <bean id="aspectBean" class="aop.TestAspect" />  
    <bean id="aService" class="service.AServiceImpl"></bean>  
    <bean id="bService" class="service.BServiceImpl"></bean>  
</beans>

 

注意切入点

(1)execution(* com.edu.spring.ArithmeticCalculator.*(..))

       表示匹配ArithmeticCalculator中声明的所有方法。第一个“*”代表任意修饰符及任意返回值,第二个“*”代表任意方法,“..”匹配任意数量的参数,“com.edu.spring.ArithmeticCalculator”指明目标方法所在的包路径,若目标类(接口)与该切面在同一个包中,可省略包名,直接给出类(接口)名称即可。

(2)execution public(* ArithmeticCalculator.*(..))

       表示匹配ArithmeticCalculator接口的所有公有方法。

(3)execution(public double ArithmeticCalculator.*(..))

        表示匹配ArithmeticCalculator中返回double类型数值的方法。

(4)execution(public double ArithmeticCalculator.*(double, ..))

         表示匹配第一个参数为double类型的方法,“..”匹配任意数量任意类型的参数

(5)execution(public double ArithmeticCalculator.*(double, double))

       表示匹配参数类型为(double,double)类型的方法.

 

 

 

 

相关标签: web框架