aop思想通过动态代理,一定程度上实现了代码的解耦。我们可以将日志模块,权限校验,事物等模块,与核心的业务代码相隔离,让程序员在写代码的时候,能够更加专注于业务。
基于注解实现AOP步骤:
①将目标类与切面类都加入到ioc容器中。
目标类该用啥注解用啥,切面类通常用@Component
即可。另外,记得在applicationContext.xml文件中配置包扫描。
②为切面类标注@Aspect注解,告诉Spring哪些是切面类。
③在切面类的各个通知方法中,标注注解,并配置切入点表达式,高数spring这些通知方法都何时何地执行。
④开启基于注解的AOP功能。 <aop:aspectj-autoproxy/>
以上的操作,可能是我们更加熟悉的开发方式,毕竟注解相较于配置方便很多很多。但是,xml配置也有它自有的优点,那就是功能更加完善。比如一个第三方的jar包,当我需要引用其中的一个切面类时,注解的方式就显得有些吃力了。xml配置方式就能很好的补足了这一点。
另外,重要的切面类,一般习惯放置在xml配置中,比如重要的权限验证,事物隔离等。
基于xml配置的AOP步骤:
①配置bean
所有加入到ioc容器的组件,在配置文件中使用bean标签进行管理。
<bean id="xxx1" class="xxxx1"/>
②指定切面
对应@Aspect注解,我们需要在aop名称空间下进行切面类的配置
每一个<aop:aspect>
标签相当于一个@Aspect注解,属性中的ref需要填写<bean>
标签中切面类的id。
<aop:config>
<aop:aspect ref="xxx1">
</aop:aspect>
</aop:config>
③配置通知方法
继续在第二步的<aop:aspect>
标签内部配置通知方法对应的标签,与注解的命名方式几乎一模一样。method为切面类中的通知方法;pointcut为切入点表达式;returning指定返回通知的返回参数;throwing指定异常通知的异常参数。
<aop:config>
<aop:aspect ref="xxx1">
<aop:before method="" pointcut="">
<aop:after method="" pointcut="">
<aop:after-returning method="" pointcut="" returning="">
<aop:after-throwing method="" pointcut="" throwing="">
<aop:around method="" pointcut="">
</aop:aspect>
</aop:config>
④开启基于注解的AOP功能。 <aop:aspectj-autoproxy/>