- AspectJ一般用于记录系统日志。(还有安全监测、权限验证)
- AspectJ有几个名词用到:
- pointcut(切点),joinPoint(连接点),Advice(增强),aspect(切面),Target(横切的对象)
- pointcut(切点):是所有声明的要执行Advice(增强)的点,可以声明或者直接在增强中配置。配置pointcut通过@Pointcut(value="execution()&&args(param)",argNames="param") public void pointcut1(String param){} @Before(value="pointcut1") public void afterReturning(JoinPoint jp) {}
- joinPoint(连接点):就是当前拦截的所用的切点(运行拦截时具体的切点),就是连接点。 @Pointcut(value="execution()&&args(param)",argNames="param") public void pointcut1(String param){} @Before(value="pointcut1") public void afterReturning(JoinPoint jp) { BizlogPeer bnLogItem = new BizlogPeer();
init(bnLogItem);
bnLogItem.setEndTime(Calendar.getInstance().getTime());
bnLogItem.setMethodName(jp.getTarget().toString().substring(0,jp.getTarget().toString().lastIndexOf("@") + 1)
+ jp.getSignature().getName());//得到拦截目标和拦截布标的方法名。
this.log(businessLog, true, bnLogItem);
} catch (BnLogException e) {
logger.error("业务日志切面抛出异常", e);
} - Advice(增强) :5中类别增强(
@Before: 前置通知, 在方法执行之前执行
@ IntroductionIntercrptor:引介增强,在目标类中添加一些新的方法和属性
@AfterReturning: 返回通知, 在方法返回结果之后执行
@AfterThrowing: 异常通知, 在方法抛出异常之后
@Around: 环绕通知, 围绕着方法执行
) - aspect(切面) :就是我们关注点的模块化。这个关注点可能会横切多个对象和模块,事务管理是横切关注点的很好的例子。它是一个抽象的概念,从软件的角度来说是指在应用程序不同模块中的某一个领域或方面。由pointcut 和advice组成。 @Aspect
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
private BizLog bizLog;
private BnLogConfiguration bizLogConfig;
@SuppressWarnings("unused")
@Pointcut("@annotation(com.wondersgroup.zhbf.commons.log.BusinessLog)")
private void logAnnotation() {
}
@AfterReturning(pointcut = "logAnnotation() && @annotation(businessLog)",returning = "retVal")
public void afterReturning(JoinPoint jp, BusinessLog businessLog, Object retVal) {} - Target(横切的对象):需要被织入横切关注点的对象,即该对象是切入点选择的对象,需要被增强的对象,从而也可称为“被增强对象”;由于Spring AOP 通过代理模式实现,从而这个对象永远是被代理对象,在AOP中表示为“对谁做”;