博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring中基于AOP的XML架构
阅读量:4626 次
发布时间:2019-06-09

本文共 4713 字,大约阅读时间需要 15 分钟。

以下内容引用自:

为了使用aop命名空间标签,需要导入spring-aop架构,如下所示:

还需要增加而外的jar包用于支持AspectJ:

org.aspectj
aspectjrt
1.8.10
org.aspectj
aspectjweaver
1.8.10

集成步骤:

1、声明一个aspect(方面)

一个aspect是使用<aop:aspect>元素声明的,并使用ref属性引用bean,如下所示:

...
...

这个“aBean”将被配置和依赖注入就像其他Spring bean一样。

2、声明一个pointcut(切入点)

切入点有助于确定用不同建议执行的关联点(即方法)。在使用基于XML Schema的配置时,切入点将定义如下:

  
  ...
  ...

以下示例定义了一个名为“businessService”的切入点,该切入点将匹配在com.tutorialspoint包中的Student类中可用的getName()方法:

  
  ...
...

提示:

①类似:“execution(*com.tutorialspoint.Student.getName(..))”这样的语法叫做AspectJ切入点语法,参考:

②官方文档关于AspectJ的介绍:

3、声明建议(通知类型)

可以使用<aop:{ADVICE NAME}>五个建议中的任何一个元素在<aop:aspect>内声明,如下所示:

    ...
...

可以对不同的建议使用相同的doRequiredTask或不同的方法。这些方法将被定义为方面模块的一部分。

至此集成完毕。

基于AOP的XML架构的示例:

pom.xml:

4.0.0
com.jsoft.testspring
testaopxml
0.0.1-SNAPSHOT
jar
testaopxml
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
org.springframework
spring-core
4.1.4.RELEASE
org.springframework
spring-context
4.1.4.RELEASE
org.springframework
spring-aop
4.1.4.RELEASE
org.aspectj
aspectjrt
1.8.10
org.aspectj
aspectjweaver
1.8.10

Logging.java:

package com.jsoft.testspring.testaopxml;public class Logging {    public void beforeAdvice() {        System.out.println("Going to setup student profile.");    }    public void afterAdvice() {        System.out.println("Student profile has been setup.");    }    public void afterReturningAdvice(Object retVal) {        System.out.println("Returning:" + retVal.toString());    }    public void AfterThrowingAdvice(IllegalArgumentException ex) {        System.out.println("There has been an exception: " + ex.toString());    }}

Student.java:

package com.jsoft.testspring.testaopxml;public class Student {    private Integer age;    private String name;    public void setAge(Integer age) {        this.age = age;    }    public Integer getAge() {        System.out.println("Age : " + age);        return age;    }    public void setName(String name) {        this.name = name;    }    public String getName() {        System.out.println("Name : " + name);        return name;    }    public void printThrowException() {        System.out.println("Exception raised:");        throw new IllegalArgumentException();    }}

beans.xml:

App.java:

package com.jsoft.testspring.testaopxml;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App {    public static void main( String[] args )    {        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");         Student student = (Student) context.getBean("student");         student.getName();         student.getAge();               student.printThrowException();    }}

测试结果:

 

测试工程:

转载于:https://www.cnblogs.com/EasonJim/p/6904515.html

你可能感兴趣的文章
Linux下C语言使用openssl库进行加密
查看>>
settTimeout vs setInterval
查看>>
Vista, the evil OS in the world
查看>>
Leetcode 80.删除排序数组中的重复项 II By Python
查看>>
常用JS加密编码算法
查看>>
spring boot中常用的配置文件的重写
查看>>
【线性规划和网络流24题】
查看>>
犹抱琵琶半遮面-OC
查看>>
标题颜色
查看>>
Python学习--和 Oracle 交互(2)
查看>>
VxWorks启动过程详解(上) 分类: vxWorks ...
查看>>
GJB150-2009军用装备实验室环境试验方法新版标准
查看>>
js面象对象插件+历史管理
查看>>
Spark学习体系整理(基础篇、中级篇、高级篇所涉及内容)
查看>>
网络编程之进程3
查看>>
Visual Studio Code 工具使用教程
查看>>
linux下shellcode编写入门
查看>>
selenium入门环境之浏览器问题
查看>>
BA--三相异步电机_星三角降压启动
查看>>
VM虚拟机安装后的网络设置
查看>>