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

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>


 

 

你可能感兴趣的:(org.aspectj.lang.JoinPoint-中文简要API 与pointcut expression表达式)