spring AOP 拦截器实现问题
自学AOP拦截器,遇到点问题。如果在调用一个方法之前拦截这个方法并记录下来,需要实现beforeMethod什么接口,然后还需要在ApplicationContext.x...
自学AOP拦截器,遇到点问题。如果在调用一个方法之前拦截这个方法并记录下来,需要实现beforeMethod什么接口,然后还需要在ApplicationContext.xml里进行配置,相关配置文件较多,拦截的方法多需要配置的也就越多,听说可以用注释的方法实现,但不知道怎么注释,求高手指点
展开
2个回答
展开全部
创建拦截类:
@Aspect
public class MyAspect{
/** 执行前拦截 */
@Before("execution(* t.t..service.*Service.*(..))")
public void before(JoinPoint point) throws Throwable {
System.out.println("执行方法:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName());
}
/** 执行后拦截 */
@After("execution(* t.t..service.*Service.*(..))")
public void after(JoinPoint point) throws Throwable {
System.out.println("执行完成:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName());
}
/** 执行前后拦截(环绕) */
@Around("execution(* cn.cydl.dlj..service.*Service.*(..))")
public Object around(ProceedingJoinPoint point) throws Throwable {
System.out.println("执行前...");
// 这里相当于@Before
Object obj = point.proceed();// 调用方法具体执行过程,如果不调用,这原来的方法就不会执行了
// obj问原来的方法返回值,如果不返回obj,则原来的方法即时有return也不会返回任何值
// 这里相当于@After
System.out.println("执行后...");
return obj;
}
}
applicationContext.xml中
引入AOP支持(头部,请自行补完整,这里不能写html地址):
xmlns:aop="...ingframework.org/schema/aop"
xsi:schemaLocation="...
...ingframework.org/schema/aop
...ingframework.org/schema/aop/spring-aop-3.2.xsd
"
具体AOP配置:
<!-- AOP配置 -->
<aop:aspectj-autoproxy />
<!-- 指定AOP拦截的Bean(主动指定上面的类) -->
<bean class="t.t.t.MyAspect" />
需要Spring核心、SpringAOP和aspectjrt、aspectjweaver等包支持。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询