- 两种方式:
a) 使用Annotation
b) 使用xml
- Annotation
a) 加上对应的xsd文件spring-aop.xsd
b) beans.xml <aop:aspectj-autoproxy />
c) 此时就可以解析对应的Annotation了
d) 建立我们的拦截类
e) 用@Aspect注解这个类
f) 建立处理方法
g) 用@Before来注解方法
h) 写明白切入点(execution …….)
i) 让spring对我们的拦截器类进行管理@Component
- 常见的Annotation:
a) @Pointcut 切入点声明 以供其他方法使用 , 例子如下:
1 @Aspect
2 @Component
3 public class LogInterceptor {
4
5 @Pointcut("execution(public * com.bjsxt.dao..*.*(..))")
6 public void myMethod(){}
7
8 @Around("myMethod()")
9 public void before(ProceedingJoinPoint pjp) throws Throwable{
10 System.out.println("method before");
11 pjp.proceed();
12 }
13 @AfterReturning("myMethod()")
14 public void afterReturning() throws Throwable{
15 System.out.println("method afterReturning");
16 }
17 @After("myMethod()")
18 public void afterFinily() throws Throwable{
19 System.out.println("method end");
20 }
21 }
@Pointcut
- 织入点语法
a) void !void
b) 参考文档(* ..)
如果 execution(* com.bjsxt.dao..*.*(..))中声明的方法不是接口实现 则无法使用AOP实现动态代理,此时可引入包”
cglib-nodep-2.1_3.jar” 后有spring自动将普通类在jvm中编译为接口实现类,从而打到可正常使用AOP的目的.
- xml配置AOP
a) 把interceptor对象初始化
b) <aop:config
- i. <aop:aspect …..
- <aop:pointcut
- <aop:before
例子:
1 <bean id="logInterceptor" class="com.bjsxt.aop.LogInterceptor"></bean>
2 <aop:config>
3 <!-- 配置一个切面 -->
4 <aop:aspect id="point" ref="logInterceptor">
5 <!-- 配置切入点,指定切入点表达式 -->
6 <!-- 此句也可放到 aop:aspect标签外 依然有效-->
7 <aop:pointcut
8 expression=
9 "execution(public * com.bjsxt.service..*.*(..))"
10 id="myMethod" />
11 <!-- 应用前置通知 -->
12 <aop:before method="before" pointcut-ref="myMethod" />
13 <!-- 应用环绕通知 需指定向下进行 -->
14 <aop:around method="around" pointcut-ref="myMethod" />
15 <!-- 应用后通知 -->
16 <aop:after-returning method="afterReturning"
17 pointcut-ref="myMethod" />
18 <!-- 应用抛出异常后通知 -->
19 <aop:after-throwing method="afterThrowing"
20 pointcut-ref="myMethod" />
21 <!-- 应用最终通知 -->
22 <aop:after method="afterFinily"
23 pointcut="execution(public * om.bjsxt.service..*.*(..))" />
24 </aop:aspect>
25 </aop:config>
aop-xml
12.Spring AOP配置与应用,布布扣,bubuko.com
时间: 2025-01-13 17:43:30