AOP
是一门编程技术,
spring
的
AOP
可以这样理解:把非核心代码从核心代码块中提取出来,通过
Spring
达到一种即插即用的效果。通俗点来说也就是,如果执行方法
1
之前必须要执行一个或多个其他非该功能的一些方法,如果按传统的开发模式,则在方法
1
的前面写几条调用语句,这样做有有好处也有坏处,好处就是如果程序代码量少那么可以很明了的指导这些方法之间的一个关系,但如果程序比较复杂代码量很大的坏,那么该功能模块中势必会参杂很多非核心的一些代码组件在里面,使代码看起来很繁杂,通过
Spring
的
AOP
技术能对此进行改善代码,让非核心的代码通过
Spring
来插入到某个切面上(或者说是某个执行点上),这样核心代码就显得更简洁,非核心的代码或组件就不会参杂在里面了
;
AOP
的概念比较抽象,但只要记住
3
个核心概念就行:
a.
Advice
:是指向核心程序内部注入的代码;比如日志记录或者其他非核心的代码
b.
PointCut
:是指
Advice
注入的一个切面,也就是上面的所谓的核心代码快,通常是一些
public
的方法(
Advice
就是插入到
PointCut
代码的前面或后面);
c.
Advisor
:是指
Advice
和
PointCut
的组装者,它是实际的将
Advice
代码注入到
PointCut
代码的操作代码。
以下代码是一个简单的运用了
AOP
编程:
接口:
package
theInterface;
public
interface
Bean {
public
void
theMethod();
}
实现类:
package
impl;
import
theInterface.Bean;
public
class
BeanImpl
implements
Bean {
public
void
theMethod() {
System.
out
.println(
“执行的核心代码:”
+
this
.getClass().getName() +
" says HELLO!"
);
}
}
定义一个
Advice
代码,该代码实现
Spring
的
MethodBeforeAdvice
接口,它有一个方法必须实现,该方法是在
PointCut
代码之前调用(看名字可知意):
注意:可能有人写好这个类后
Eclipse
提示要求
Configure build path…
那么很可能还少一个包:
aopalliance-1.0.jar
,这个包在
Spring
包中没有,但运行的时候又必须有,所以
Eclipse
会提示导包。
这个包可在我资源里面下载
package
impl;
import
java.lang.reflect.Method;
import
org.springframework.aop.MethodBeforeAdvice;
注意下面的方法中的
Method m
表示需要注入其他代码的方法,也就是实际类的核心代码,可用于进行判断是否需要执行下面的注入代码
,args
表示方法的参数数组
,target
表示方法所在类对象
public
class
TestBeforeAdvice
implements
MethodBeforeAdvice{
public
void
before(Method m, Object[] args, Object target)
throws
Throwable {
System.
out
.println(
"
需要注入的代码:
"
+
this
.getClass().getName() +
")"
);
}
}
下面定义
Spring
的配置文件:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
>
<
bean
id
=
"beanTarget"
class
=
"impl.BeanImpl"
/>
<
bean
id
=
"bean"
class
=
"org.springframework.aop.framework.ProxyFactoryBean"
>
<
property
name
=
"
proxyInterfaces
"
>
<
value
>
theInterface.Bean
</
value
>
</
property
>
<
property
name
=
"target"
>
<
ref
local
=
"beanTarget"
/>
</
property
>
<
property
name
=
"interceptorNames"
>
<
list
>
<
value
>
theAdvisor
</
value
>
</
list
>
</
property
>
</
bean
>
<
bean
id
=
"theAdvisor"
class
=
"org.springframework.aop.support.
RegexpMethodPointcutAdvisor
"
>
<
property
name
=
"advice"
>
<
ref
local
=
"theBeforeAdvice"
/>
</
property
>
<
property
name
=
"pattern"
>
<
value
>
theInterface/.Bean/.theMethod
</
value
>
</
property
>
</
bean
>
<
bean
id
=
"theBeforeAdvice"
class
=
"impl.TestBeforeAdvice"
/>
</
beans
>
注意:
1.
这几个
<bean>
的顺序无所谓,因为程序是先把配置信息全部载入,然后在根据需要进行组装
2.
上面配置了一个名为“
theBeforeAdvice
”的
Advice
,包含了正则表达式的
PointCut
的
Advisor.
3.
Advisor
通过
spring
的
RegexpMethodPointcutAdvisor
类来实现,他定义了一个名为
advice
的标签,该标签提供
Advice
所需要的类;他还定义了一个名为
pattern
的标签,该标签是
PointCut
表示的方法。
4.
配置文件同时还配置了一个工厂
Bean
,它是通过
ProxyFactoryBean
来实现的;
a.
proxyInterfaces
定义了接口类;
b.
target
定义了接口的实现类;
c.
interceptorNames
表示值列表属性,这个列表表示不要在
target
上执行的
Advisor
。注意:必须考虑他们的执行顺序。
相关推荐
JAVA Spring AOP面向切面编程笔记
Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...
面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
Spring AOP面向切面编程实现原理方法详解 面向切面编程(AOP)是Spring框架中的一个重要内容,通过预编译方式和运行期动态代理实现,在不修改源代码的情况下,给程序动态统一添加功能的一种技术。AOP可以对业务逻辑...
### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...
Spring4AOP 面向切面编程实例之方法拦截实例 一下利用Spring4的最后一个版本Spring4.3.9,实现简单的方法拦截实例。 Eclipse 建立java工程,导入必要的jar包,工程目录如下:
**Spring AOP 面向切面编程详解** 在Java世界中,Spring框架以其强大的功能和易用性闻名,其中一个核心特性就是面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是为了解决传统面向对象编程中横切关注点...
学习Spring开发的AOP面向切面编程时所需要的jar包,包括com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...
Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。面向切面编程(Aspect Oriented Programming,AOP)的核心思想是将关注...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。`@Aspect`是Spring AOP的核心注解,用于定义一个切面。下面我们将详细...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...
面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。
### 面向切面编程(AOP) 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高模块化程度,通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,使得代码更加清晰、...
该压缩包包含--学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:--系列博客中新需要的三个jar包。包括spring-aspects-5.2.7.RELEASE.jar和spring-aop-5.2.7.RELEASE.jar和...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要组成部分,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、性能监控等。在传统的OOP(面向对象编程)中...