JAVA框架 Spring AOP注解
一、准备工作:
1)导入jar包:
4个jar包。
2)约束:(spring需要所有的约束)有IOC约束和AOP 还有事务(tx)以及注解注入的约束(context)。
1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:aop="http://www.springframework.org/schema/aop"
6 xmlns:tx="http://www.springframework.org/schema/tx"
7 xsi:schemaLocation="http://www.springframework.org/schema/beans
8 http://www.springframework.org/schema/beans/spring-beans.xsd
9 http://www.springframework.org/schema/context
10 http://www.springframework.org/schema/context/spring-context.xsd
11 http://www.springframework.org/schema/aop
12 http://www.springframework.org/schema/aop/spring-aop.xsd
13 http://www.springframework.org/schema/tx
14 http://www.springframework.org/schema/tx/spring-tx.xsd">
15
16 </beans>
3)代码:
1、接口
1 package jd.com.asp;2
3 public interface asp {
4 void save();
5 void update();
6 }
2、实现类:
1 package jd.com.asp;2
3
4 import org.springframework.stereotype.Component;
5
6 @Component(value = "aspImpl")//注入该类。
7 public class aspImpl implements asp {
8 @Override
9 public void save() {
10 System.out.println("this save method");
11 }
12
13 @Override
14 public void update() {
15 System.out.println("this update method !");
16 }
17 }
3、切面类:
1 package jd.com.asp;2
3
4 import org.aspectj.lang.annotation.Aspect;
5 import org.aspectj.lang.annotation.Before;
6 import org.aspectj.lang.annotation.Pointcut;
7 import org.springframework.stereotype.Component;
8
9
10 @Component(value = "aspj")//注入切面类。
11 @Aspect//声明该类为切面类。
12 public class aspj {
13
14
15 @Before(value = "execution(public void jd.com.asp.aspImpl.save(..))" )//通知类型和切入点。
16 public void log(){
17 System.out.println("log print!");
18 }
19 }
需要注明该类为切面类。
需要注明方法的通知类型和切入点表达式。
4、配置文件配置:
1 <!--开启自动扫描组件-->2 <context:component-scan base-package="jd.com" />
3 <!--打开自动代理开关-->
4 <aop:aspectj-autoproxy />
入门例子完成。
通知类型:
1 package jd.com.asp;2
3
4 import org.aspectj.lang.ProceedingJoinPoint;
5 import org.aspectj.lang.annotation.*;
6 import org.springframework.stereotype.Component;
7
8
9 @Component(value = "aspj")//注入切面类。
10 @Aspect//声明该类为切面类。
11 public class aspj {
12
13
14 @Before(value = "execution(public void jd.com.asp.aspImpl.save(..))" )//通知类型和切入点。
15 public void log(){
16 System.out.println("log print!");
17 }
18
19
20 //切入点调用方法:类的名字.方法名字()
21 @After(value = "aspj.fn()")
22 public void after(){
23 System.out.println("最终的方法!");
24 }
25
26 @AfterReturning(value = "aspj.fn()")
27 public void afterreturning(){
28 System.out.println("后置方法");
29
30 }
31
32
33 @Around(value = "aspj.fn()")
34 public void round(ProceedingJoinPoint proceedingJoinPoint){
35 System.out.println("环绕方法执行1");
36 try {
37 proceedingJoinPoint.proceed();
38 } catch (Throwable throwable) {
39 throwable.printStackTrace();
40 }
41 System.out.println("环绕方法执行2");
42 }
43
44
45
46 //切入点定义 方法的body需要是空的。
47 @Pointcut(value = "execution(public void jd.com.asp.aspImpl.save(..))")
48 public void fn(){}
49 }
其中可以定义切入点:
1)需要定义一个body是空的方法。
2)需要pointcut注解 后面跟切入点表达式。
3)调用的时候需要value=当前切面类的类名字.切入点定义的方法名字()
1 //切入点定义 方法的body需要是空的。2 @Pointcut(value = "execution(public void jd.com.asp.aspImpl.save(..))")
3 public void fn(){}
以上是 JAVA框架 Spring AOP注解 的全部内容, 来源链接: utcz.com/z/393722.html