1.AOP的实现:1.1配置文件的形式实现的。
实现核心业务和辅助功能的交织:
目的是为了将核心业务与辅助业务分开
步骤: 1.定义好辅助功能的切面类,以及核心功能业务类。
2.通过ApplicationContext.xml配置切面与业务方法的交织
(spring支持方法的切入)
3. 配置切入点
需要一个代理对象实现辅助功能的调用,
AOP是通过动态代理的形式实现切面的
<aop:config proxy-target-class="true">
<aop:aspect id="" ref="">
<aop:pointcut id="display" expression="execution(* service.StudentService.display(..))"/>
配置具体的通知,辅助功能的方法
<aop:before method="before" pointcut-ref="display"/>
<aop:after method="after" pointcut-ref="display"/>
<aop:after-returning method="returnning" pointcut-ref="display" returning="o"/>
<aop:after-throwing method="exception" pointcut-ref="display"/>
</aop:aspect>
</aop:conig>
1.2注解的形式实现AOP:
1.定义好辅助功能的切面类,以及核心功能业务类。
2.开启注解,并使用aspectj的动态代理的形式实现
<context:component-scan base-package="AOP"></context:component-scan>
<!--指明使用aspectj-autoproxy动态代理的形式实现-->
<aop:aspectj-autoproxy proxy-target-class="true"/>
3.对应的切面类写明注解:
@Aspect
@Component
public class WatchAOP {
@Pointcut("execution(* service.StudentService.display(..))")
public void myProject(){}
@Before("myProject()")
public void before(){
System.out.println("核心业务方法调用之前");
//日志功能,性能统计。。。。
};
@After("myProject()")
public void after(){
System.out.println("核心业务方法调用之后");
};
@AfterThrowing("myProject()")
public void exception(){
System.out.println("核心业务方法出现异常");
};
@AfterReturning(value = "myProject()",returning = "o")
public void returnning(JoinPoint point,Object o){
System.out.println("方法已经执行完成,核心方法的类名是:"+point.getTarget().getClass().getName()+"核心业务的方法是"+point.getSignature().getName()+"方法的返回值是:"+o);
};
};
网友评论