定义切点的方式:
定义切点我们常见的就是execution 表达式,通过通配符然扫描包匹配出一个切面集合
execution方式
例如我们要将事务加到系统的dao上面,因此我们需要将系统中的dao给筛选出来
<aop:pointcut id="txPointcutDao" expression="execution(* cn.lambdafk.bpm.dao.*Dao.*(..))" />
如果我们还要将事务加到service上面呢,但是只是1个包下的和一个指定的service
<aop:pointcut id="txPointcut"
expression="(execution(* com.lambdafk.inr.service.impl.*ServiceImpl.*(..))) or (execution(* com.lambdafk.out.webservice.es.transflow.svc.impl.*ServiceImpl.*(..)))" />
自定义方式--列表指定
我们可以指定列表来进行切点的定义,这是一种静态切入点的方式
静态切入点只限于给定的方法和目标类,而不考虑方法的参数。Spring在调用静态切入点时只在第一次的时候计算静态切入点的位置,然后把它缓存起来,
指定特定的类:静态切入点
<bean id="annotationPointcut" class="com.lambdafk.inr.common.spring.AnnotationPointcut">
<property name="classList">
<list>
<value>com.lambdafk.out.webservice.es.transflow.svc.TransFLowService</value>
<value>com.lambdafk.inr.service.SubscribeESFlowMatchService</value>
<value>com.lambdafk.inr.quartz.AutoSumCustomerAssetJob</value>
<value>com.lambdafk.inr.quartz.AutoDoMatchJob</value>
</list>
</property>
</bean>
列表指定,特定的包:静态切入点
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
scope="prototype">
<property name="patterns">
<list>
<value>com.lambdafk.inr.service.*</value>
<value>com.lambdafk.inr.dao.*</value>
</list>
</property>
</bean>
自定义方式--注解进行
@AfterReturning(pointcut = "execution(* cn.lambdafk.inr..*ServiceImpl.*(..))", returning = "returnVal")
public void afterReturn(JoinPoint jp, String returnVal) {
Logger logger = instanceLogger(this.getClass(jp));
String methodName = this.getMethodName(jp);
logger.info("【" + methodName + "】方法的返回值为:" + returnVal);
}
@Pointcut("execution(* cn.lambdafk.inr..*ServiceImpl.*(..))")
public void printLog() {
}