第一篇博客-AspectJ的简单理

来源:互联网 发布:笨驴软件 编辑:程序博客网 时间:2024/05/18 03:24

  1. AspectJ一般用于记录系统日志。(还有安全监测、权限验证
  2. 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中表示为“对谁做”;                                                                                                                                                                                                                                                                                     

0 0
原创粉丝点击