Spring学习之AOP
程序员文章站
2022-05-24 23:44:27
...
学完了基础的AOP,感觉有几个要点要记住.
1.AspectJ自动代理要加上,不然@Aspect注解不起作用
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
2.环绕通知可以把其它通知的事情一块干了,比较简单方便
@Aspect
@Component
public class AudienceAround {
@Pointcut("execution(* concert.Performance.perform(..))")
public void performance(){}
@Around("performance()")
public void watchPerformance(ProceedingJoinPoint jp){
try {
System.out.println("Silencing cell phones 华为,中国的骄傲");
System.out.println("Taking seats");
jp.proceed();
System.out.println("CLAP CLAP CLAP!!!");
} catch (Throwable throwable) {
System.out.println("Demanding a refund");
}
}
}
3.每一个Aspect都是一个bean,要加上 @Component 注解
4.注解可以变相的为代理对象添加新的功能,XML配置更加的清晰
<aop:config>
<aop:aspect>
<aop:declare-parents types-matching="concertXML.Performance+"
implement-interface="concertXML.Encoreable" default-impl="concertXML.DefaultEncoreable"/>
</aop:aspect>
</aop:config>
类的形式很容易就把人搞晕,所以建议用XML配置
@Aspect
@Component
public class EncoreableIntroducer {
@DeclareParents(value = "concert.Performance+",defaultImpl = DefaultEncoreable.class)
public static Encoreable encoreable;
}
5.添加的新功能使用的时候,是强制类型转换,这个一般人根本想不到,不是很直观
Performance p= (Performance) context.getBean(Performance.class);
((Encoreable)p).perfromEncore();
6.使用AOP实现权限控制,是练习重点