一个简单的 aop demo
spring 配置
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
<!-- 注册aspectj -->
<aop:aspectj-autoproxy />
<!-- 注册代理过滤器 -->
<context:component-scan base-package="com.aspect.*">
<context:include-filter type="annotation"
expression="org.aspectj.lang.annotation.Aspect" />
</context:component-scan>
简单的环绕方式
@Around("execution(* com.aspect..*.add*(..))")
public Object aroundAdd(ProceedingJoinPoint pjp) throws Throwable {
// Class pt = (Class) pjp.getTarget();
Object retVal = pjp.proceed();
for (int i = 0; i < pjp.getArgs().length; i++) {
System.out.println(">>>around>>>参数:" + pjp.getArgs()[i]);
}
System.out.println(">>>aronud>>>方法名:" + pjp.getSignature());
System.out.println("SourceLocation:"+pjp.getSourceLocation());
System.out.println("StaticPart:"+pjp.getStaticPart());
System.out.println("this:"+pjp.getThis());
System.out.println("Target:"+pjp.getTarget().toString());
return retVal;
}
demo
public class TestDemo {
static String context = null;
static ApplicationContext applicationContext;
static {
context = "applicationContext.xml";// ehcache简单配置(命名空间)
applicationContext = new ClassPathXmlApplicationContext(context);
}
public static void main(String[] arg) {
System.out.println("start---");
IDemo demo = (IDemo) applicationContext.getBean("demo");
IUser iu = demo.getUserImpl();
if (iu != null) {
iu.addUser("风光");
demo.getUserImpl().findUser("Lucy") ;
}
}
}
附件是完整的demo
输出
start---
>>>>>>>> 增加用户--检查ing..........
参数:风光
方法名:addUser
---------权限检测--------------
>>>>>>>> 增加用户--检查完毕!未发现异常!..........
>>>around>>>参数:风光
>>>aronud>>>方法名:void com.aspect.service.IUser.addUser(String)
SourceLocation:org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint$SourceLocationImpl@1a1399
StaticPart:execution(void com.aspect.service.IUser.addUser(String))
this:com.aspect.service.impl.UserImpl@1551b0
Target:com.aspect.service.impl.UserImpl@1551b0
>>>>>>>> 准备搜查用户..........
Lucy
>>>>>>>> 搜查用户完毕..........