第一篇博客-AspectJ的简单理
来源:互联网 发布:笨驴软件 编辑:程序博客网 时间:2024/05/18 03:24
- 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中表示为“对谁做”;
0 0
- 第一篇博客-AspectJ的简单理
- 第一篇的博客
- ***的第一篇博客
- 博客的第一篇
- 博客的第一篇
- 我的第一篇CSDN博客--ToolBar的简单使用
- 我的第一篇博客之简单叙述
- 简单计时器组件(我的第一篇博客)
- 第一篇博客,简单介绍RecyclerView的应用
- 我的第一篇博客
- 我的博客 第一篇
- 我的第一篇博客
- 我的第一篇博客
- 我的第一篇博客
- 第一篇的博客文章
- 我的第一篇博客
- 我的第一篇博客
- 我的第一篇博客
- Leetcode-371-Sum of Two Intergers
- spring中@value注解需要注意
- python编码错误:UnicodeDecodeError: 'utf8' codec can't decode
- RPC 分布式事务的疑问
- java中为什么要实现序列化,什么时候实现序列化?
- 第一篇博客-AspectJ的简单理
- c++对象的动态创建与释放
- TensorFlow官网教程Convolutional Neural Networks 难点详解
- [Leetcode] Majority Element
- VS2015使用小技巧 如何在写函数的时候,让VS显示函数的辅助说明
- ElasticSearch 调用
- 关于html中<img src= >的使用!!
- 【腾讯TMQ】用FSM写Case,你会么?
- centos7下编译安装mysql