aop(面向切面)编程思想在spring框架下实现的配置方法

来源:互联网 发布:krpano100源码 授权码 编辑:程序博客网 时间:2024/05/17 08:31

aop是一种编程思想,强调的是消除重复代码和对已有方法进行动态增强。它将重复代码进行横向抽取,利用代理技术对重复代码进行整合,以达到消除重复代码,增强方法功能。而在spring框架下spring提供了相应的管理方法我们只需进行一定的配置即可实现aop编程。应用aop编程首先就是要导相关jar包和依赖包,需要的包有4springcore包、beans包、context包、spel包)+2spring依赖包的logging日志包、log4j包)+1springaop包)+1springaspect包)+1spring依赖包的aopallicance+1spring依赖包的weaver包)


1、通过applicationContext.xml文件进行配置

1)、将目标对象配置到spring容器中

    利用<bean>标签将目标对象配置到spring容器中

例:

<bean name="userService"class="com.company.project.service.impl.ServiceImpl"/>

2)、将代理对象配置到spring容器中

利用<bean>标签将代理对象配置到spring容器中

例:

<bean name="myAdvice"class="com.company.project.service.MyAdvice"/>

3)、配置切面

配置切面前首先要配置切入点,目的是让spring找到相应的要整合或增强的方法;然后配置切面

<aop:config><aop:poincut expression="execution(public void com.company.project.service.impl.ServiceImpl.action())"id="pc"/>//切入点<aop:aspect ref="userService"> <aop:before method="beforeAdvice”point-ref="pc">//前置通知</aop:aspect>//切面。</aop:config>


2、通过注解配合applicationContext.xml文件进行配置

(1)、在xml中先将切点和通知配置到spring容器中

     此处配置同上一种配置在此不再赘述

(2)、开启aspectJ的自动代理,以完成织入

     <aop:aspectj-autoproxy></ aop:aspectj-autoproxy>

(3)、在通知类中配置通知

     完成xml中配置的准备工作后要在通知类中通过注解对通知类进行配置,

     @Aspect:类名上的注解,标注此类为通知类

     @Pointcut(execution(public void com.company.projectservice.impl.ServiceImpl.action()

         public viod pct(){}//通常为了方便coding写这样一个空方法来配置切点而省去重复配置切点

@Before(“MyAdvice.Pct()”):方法名上的注解,前置通知

@After(“MyAdvice.Pct()”):方法名上的注解,后置通知,不会异常阻断

@AfterReturning(“MyAdvice.Pct()”):方法名上的注解,后置通知,会被异常阻断

@Around(“MyAdvice.Pct()”):方法名上的注解,环绕通知(方法中间用ProceedingJoinPoint的proceed方法截断,以区分前置绕和后置环绕)

@Throwing(“MyAdvice.Pct()”)方法名上的注解,异常拦截通知(只有在出现异常时才会通知)

 

注:一般为了提高效率会把expression表达式配置为通配形式:

*  com.company.project.service.impl..*Impl.*(..)

修饰符可省略,返回值用*通配注意空格,.. 表示子孙包,参数用..通配