通知(advice),切点(pointcut),连接点(joinpoint)
- 切点的写法
@Aspect 声明一个切面
@Before (“execution(* concert.Performance.perform(…)) && within(concert.)and bean(‘woodstock’)")
@After ("execution( concert.Performance.perform(…)) && within(concert.)and bean(‘woodstock’)")
@AfterReturning ("execution( concert.Performance.perform(…)) && within(concert.)and bean(‘woodstock’)")
@AfterThorwing ("execution( concert.Performance.perform(…)) && within(concert.)and bean(‘woodstock’)")
@Around ("execution( concert.Performance.perform(…)) && within(concert.*)and bean(‘woodstock’)”)
@PointCut 声明一个切点
@PointCut("execution(* concert.Performance.perform(int)) && within(concert.*)and bean('woodstock')")
public void performance(){};
-->
@Before ("performance")
@EnableAspectJAutoProxy + @Bean 启用注解的动态代理
<aop: aspectg-autoproxt/> + <bean class= " >
处理通知中的参数
@PointCut("execution(* concert.Performance.perform(...)) and args(trackNumber)")
public void performance(){};
@Before ("performance")
public void countTrack(int trackNumber){
}
- 通过注解引入新功能
@Aspect + @DeclarParents(value=“concert.Performance+”,defaultImpl=DefaultEncoreable.class)
public static Encoreable encoreadble;
+@Bean 声明 - Xml文件配置
<aop:config>
<aop:aspect ref="audience">
<aop:before
pointcut=""execution(* concert.Performance.perform(...)) && within(concert.*)and bean('
woodstock')" mthod="takeseats/>
</aop:aspect>
<aop:pointcut id="performance" experssion="execution(
* concert.Performance.perform(...)) and within(concert.*)and bean('woodstock')"/>声明一个切点
<aop:around pointcut="performance" method="watchPerformance"/> 环绕通知
<aop:pointcut id="trackCounter" expression="execution(* soundsystem.CompactDisc.
playTrace(int) and args(traceNumber)"/>
<aop:declare-parents
type-matching="concerperformance+" implement-interface="concer.Encoreable"
default-impl="concer.DefaultEncoreable"/>
</aop:config>