JAVA框架 Spring AOP注解

java

一、准备工作:

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

回到顶部