Spring AOP
二代
在
Spring AOP
第一代中,
AOP
的
Advice
必须实现特定接口,而配置设置依赖于
XML
的繁琐设置。在
Spring2.0
之后,对于
AOP
功能的实现与设置新增了两种方法:一种是基于
XML Schema
的设置;一种是基于
Annotation
的支持。两种方式对于
AOP
在使用上的简化都有极大地帮助。而且
Advice
不用再实现任何其他特定的接口。
基于XML Schema的前置通知
在这里以实际的例子说明
Spring2.x
在
AOP
的实现和设置上的改变,现在
LogBeforeAdvice
不需要实现
MethodBeforeAdvice
,改写后的程序如下。
public class LogBeforeAdvice {
public void before(JoinPoint joinPoint) {
System.out.println(joinPoint.getSignature().getName()+",start.............LogBeforeAdvice");
}
}
在程序代码中,
before()
方法为任意取的名称,它可以接受
JoinPoint
实例,也可以省略。可以使用
JoinPoint
的
getTarget()
方法取得目标对象,使用
getArgs()
取得调用的方法参数、使用
getSinature()
方法取得
Pointcut
签名等信息。在
Spring2.x
任何一个
Advice
的方法实现都可以自行决定是否接受
JoinPoint
实例。
<bean id="logBeforeAdvice" class="com.edu.cug.LogBeforeAdvice"/>
<aop:config>
<aop:aspect id="logBeforeAspect" ref="logBeforeAdvice">
<aop:pointcut id="LogbeforePointcut" expression="execution(* hello*(..))"/>
<aop:before pointcut-ref="LogbeforePointcut" method="before"/>
</aop:aspect>
</aop:config>
透过配置文件可以看到,首先不再需要明确声明使用
ProxyFactoryBean
,所有的
AOP
配置都是在
<
aop:config
>
标签中设置的;
<
aop:aspect
>
标签定义
Aspect
的实现,也就是
Advice
和
Pointcut
结合。
测试程序如下面所示:
public class AopTest {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
IHello bean = (IHello) factory.getBean("IHello");
bean.hello1("AOP1");
bean.hello2("AOP2");
}
}
测试结果如下:
hello1,start.............LogBeforeAdvice
hello1,AOP1
hello2,start.............LogBeforeAdvice
hello2,AOP2
基于Annotation的前置通知
在
Spring2.0
以后,还可以通过
Annotation
来设置
AOP
的
Advice
,在
XML
的设置上可以更加简化,这里改写
LogBeforeAdvice
:
@Aspect
public class LogBeforeAdvice {
@Pointcut("execution(* com.edu.cug.IHello.*(..)) ")
public void anymethod(){}
@Before("anymethod()")
public void before(JoinPoint joinPoint) {
System.out.println(joinPoint.getSignature().getName()
+ ",start.............LogBeforeAdvice");
}
}
配置文件修改如下:
<bean id="IHello" class="com.edu.cug.IHelloImpl"></bean>
<bean id="logBeforeAdvice" class="com.edu.cug.LogBeforeAdvice"></bean>
<aop:aspectj-autoproxy/>
测试程序如下:
public class AopTest {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
IHello bean = (IHello) factory.getBean("IHello");
bean.hello1("AOP1");
bean.hello2("AOP2");
}
}
运行结果如下:
hello1,start.............LogBeforeAdvice
hello1,AOP1
hello2,start.............LogBeforeAdvice
hello2,AOP2
可以看到,基于
Annotation
的
AOP
设置方式,在
XML
上几乎不用设置,只要实例化
Advice
与你的目标对象,接着一切就让
Spring
自动取得
Annotation
信息,进行代理对象建立,无须再做任何的设置。这个范例的执行结果和上一个范例是相同的。
Spring的Pointcut定义
在
Spring2.x
中要声明
Pointcut
,主要包括两个部分:
Pointcut
表达式
(expression)
与
Pointcut
签名
(signature)
。首先来看
Pointcut
表达式,在
Spring
中,
execution
表示式会是最常用的
Pointcut
表示式,它的语法组成格式如下所示:
Execution (modifiers –patterns?
ret-type-pattern
declaring-type-pattern?
name-pattern (param-pattern)
throws-pattern?
)
它们分别表示存取修饰匹配
(modifiers –patterns)
、返回值类型匹配
(ret-type-pattern
)
、类限定名匹配
(declaring-type-pattern)
、方法名称匹配
(
参数类型匹配
)
、异常类型匹配
(throws-pattern)
、有问号的部分,表示可以省略不声明。
在
Spring2.x
中,结合
@Pointcut
的
Annotation
定义方式,可以让
Pointcut
在定义上更加容易,定义包含两个部分:
Pointcut
表示式与
Pointcut
签名
(signature)
。
Pointcut
定义是,还可以使用
&&
、
||
、
!
运算。
使用
Spring2.x
的新特性实现
AOP
更加简单、快捷,所以使用
Spring2.x
或更高的版本能缩短开发周期,性能方面丝毫不逊色以前的
AOP
支持。
分享到:
相关推荐
Spring5 框架 ---- AOP ---- 代码 Spring5 框架 ---- AOP ---- 代码 Spring5 框架 ---- AOP ---- 代码 Spring5 框架 ---- AOP ---- 代码 Spring5 框架 ---- AOP ---- 代码 Spring5 框架 ---- AOP ---- 代码 Spring5 ...
赠送jar包:spring-aop-5.3.10.jar; 赠送原API文档:spring-aop-5.3.10-javadoc.jar; 赠送源代码:spring-aop-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.10.pom; 包含翻译后的API文档:spring...
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
赠送jar包:spring-aop-5.3.12.jar; 赠送原API文档:spring-aop-5.3.12-javadoc.jar; 赠送源代码:spring-aop-5.3.12-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.12.pom; 包含翻译后的API文档:spring...
赠送jar包:spring-aop-5.3.15.jar; 赠送原API文档:spring-aop-5.3.15-javadoc.jar; 赠送源代码:spring-aop-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.15.pom; 包含翻译后的API文档:spring...
赠送jar包:spring-aop-5.3.15.jar; 赠送原API文档:spring-aop-5.3.15-javadoc.jar; 赠送源代码:spring-aop-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.15.pom; 包含翻译后的API文档:spring...
赠送jar包:spring-aop-5.3.7.jar; 赠送原API文档:spring-aop-5.3.7-javadoc.jar; 赠送源代码:spring-aop-5.3.7-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.7.pom; 包含翻译后的API文档:spring-aop...
赠送jar包:spring-aop-5.2.0.RELEASE.jar; 赠送原API文档:spring-aop-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.2.0.RELEASE.pom;...
赠送jar包:spring-aop-5.3.7.jar; 赠送原API文档:spring-aop-5.3.7-javadoc.jar; 赠送源代码:spring-aop-5.3.7-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.7.pom; 包含翻译后的API文档:spring-aop...
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
赠送jar包:spring-aop-5.3.10.jar;赠送原API文档:spring-aop-5.3.10-javadoc.jar;赠送源代码:spring-aop-5.3.10-sources.jar;赠送Maven依赖信息文件:spring-aop-5.3.10.pom;包含翻译后的API文档:spring-aop...
spring-aop-5.3.22.jar Spring AOP provides an Alliance-compliant aspect-oriented programming implementation allowing you to define method interceptors and pointcuts to cleanly decouple code that ...
Spring AOP 源码分析笔记 Spring AOP(Aspect-Oriented Programming)是一种编程范式,它允许开发者 modularize cross-cutting concerns,即将横切关注点模块化。AOP 使得开发者可以将一些公共的功能模块化,以便在...
aopalliance-1.0.jar,org.springframework.aop-3.0.0.RELEASE.jar,org.springframework.jdbc-3.0.0.RELEASEorg.springframework.beans-3.0.0.RELEASE.jar等
赠送jar包:spring-aop-5.0.8.RELEASE.jar; 赠送原API文档:spring-aop-5.0.8.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.0.8.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.0.8.RELEASE.pom;...
org.springframework.aop-sources-3.0.5.release.jar
"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨Spring AOP、相关jar文件以及它们在实际开发中的作用。 首先,我们来看一下提供的文件: 1. aopalliance.jar:这是一...
赠送jar包:spring-aop-5.0.10.RELEASE.jar; 赠送原API文档:spring-aop-5.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.0.10.RELEASE....
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...