org.aspectj.lang.JoinPoint-中文简要API 与pointcut expression表达式

来源:互联网 发布:拉勾网职位数据 编辑:程序博客网 时间:2024/05/30 13:42

AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息。我们先来了解一下这两个接口的主要方法: 
1)JoinPoint 
 java.lang.Object[] getArgs():获取连接点方法运行时的入参列表; 
 Signature getSignature() :获取连接点的方法签名对象; 
 java.lang.Object getTarget() :获取连接点所在的目标对象; 
 java.lang.Object getThis() :获取代理对象本身; 
2)ProceedingJoinPoint 
ProceedingJoinPoint继承JoinPoint子接口,它新增了两个用于执行连接点方法的方法: 
 java.lang.Object proceed() throws java.lang.Throwable:通过反射执行目标对象的连接点处的方法; 
 java.lang.Object proceed(java.lang.Object[] args) throws java.lang.Throwable:通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。 

 

注意事项:ProceedingJoinPoint :使用这个类取处理日志,只能处理环绕通知

<!-- 打开AOP的拦截功能,proxy-target-class:是用来控制注入的时实现类还是接口,默认是false表示只能注入接口,true:表示可以用类来注入--><aop:aspectj-autoproxy proxy-target-class="false"/>          <aop:config><!-- 声明一个切面 --><aop:aspect id="testExcuteAspect" ref="testExcute"><!-- 声明一个装备,是在什么时候执行日志处理 --><!-- 声明一个切入点,expression: 第一个*表示:通配符,表示返回任何类型,                                第二个*表示:通配符,表示这个包下的任意类                                第三个*表示:通配符,表示这个类下的方法可以有0个或多个参数            (..):表示这个包下的所有子包                                        --><aop:pointcut expression="execution(* com.ckpt.logPackage.*.*(..))" id="logTest" /><aop:around  method="getLog" pointcut-ref="logTest" /></aop:aspect></aop:config><bean id="testExcute" class="com.ckpt.logPackage.TestExcute" scope="prototype"></bean><bean id="test" class="com.ckpt.Action.Test" scope="prototype"><property name="test2" ref="test2"></property></bean><bean id="test2" class="com.ckpt.logPackage.Test2" scope="prototype"></bean>


 

 

0 0
原创粉丝点击