Spring 中基于 AOP 的 @AspectJ注解实例

2021-01-24 19:16

阅读:700

标签:info   lan   new   内容   头文件   xmla   getname   throw   framework   

@AspectJ 作为通过 Java 5 注释注释的普通的 Java 类,它指的是声明 aspects 的一种风格。通过在你的基于架构的 XML 配置文件中包含以下元素,@AspectJ 支持是可用的。

1.第一步:倒入jar包,跟上个例子包是一样的

  • aspectjrt.jar

  • aspectjweaver.jar

  • aspectj.jar

  • aopalliance.jar

2.第二步:创建三个类  

  2.1这里是 Logging.java 文件的内容。这实际上是 aspect 模块的一个示例,它定义了在各个点调用的方法。

 1 package com.spring.aop2;
 2 
 3 import org.aspectj.lang.annotation.AfterReturning;
 4 import org.aspectj.lang.annotation.AfterThrowing;
 5 import org.aspectj.lang.annotation.Aspect;
 6 import org.aspectj.lang.annotation.Before;
 7 import org.aspectj.lang.annotation.Pointcut;
 8 
 9 @Aspect // 定义切面
10 public class Logging {
11     @Pointcut("execution(* com.spring.aop2.Student.*(..))") // 定义切点
12     private void selectAll() {
13 
14     }
15     /**
16      * 定义通知方法
17      */
18 
19     @Before("selectAll()")
20     public void beforeAdvice() {
21         System.out.println("----------beforeAdvice-----------");
22 
23     }
24 
25     @AfterReturning(pointcut = "selectAll()", returning = "retVal")
26     public void afterReturningAdvice(Object retVal) {
27         System.out.println("Returning:" + retVal.toString());
28     }
29 
30     @AfterThrowing(pointcut = "selectAll()", throwing = "ex")
31     public void AfterThrowingAdvice(IllegalArgumentException ex) {
32         System.out.println("There has been an exception: " + ex.toString());
33     }
34 
35 }

  2.2下面是 Student.java 文件的内容:

 1 package com.spring.aop2;
 2 
 3 public class Student {
 4     /**
 5      * 定义学生类
 6      */
 7     private String name;
 8     private Integer age;
 9 
10     public String getName() {
11         return name;
12     }
13 
14     public void setName(String name) {
15         this.name = name;
16     }
17 
18     public Integer getAge() {
19         return age;
20     }
21 
22     public void setAge(Integer age) {
23         this.age = age;
24     }
25 
26     public void printAdvice() {
27         System.out.println("name:" + name + ",age:" + age);
28 
29     }
30 
31 }

  2.3下面是 MainApp.java 文件的内容:

 1 package com.spring.aop2;
 2 
 3 
 4 
 5 import org.springframework.context.ApplicationContext;
 6 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 7 import org.springframework.context.support.AbstractApplicationContext;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 
10 public class Main {
11     /**
12      * Spring aop基于注解    配置文件springAop.xml
13      * author:
14      * mail:2536201485@qq.com
15      * 时间:
16      */
17     public static void main(String[] args) {
18         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/springAop.xml");
19         Student student=(Student)applicationContext.getBean("Student");
20         student.printAdvice();
21     }
22 
23 }

3.第三步:创建bean文件(上面的头文件在上个例子当中有,这里就省略了)

下面是配置文件 Beans.xml

 1     
 2     
 4     aop:aspectj-autoproxy/>
 5     
 6     bean id="Logging" class="com.spring.aop2.Logging">bean>
 7     
 8     
 9     bean id="Student" class="com.spring.aop2.Student">
10         property name="name" value="张三">property>
11         property name="age" value="23">property>
12     bean>

 

让我们运行一下应用程序。如果你的应用程序一切都正常的话,这将会输出以下消息(其中包含了异常通知):

技术图片

 

Spring 中基于 AOP 的 @AspectJ注解实例

标签:info   lan   new   内容   头文件   xmla   getname   throw   framework   

原文地址:https://www.cnblogs.com/ysource/p/12864818.html


评论


亲,登录后才可以留言!