1. AOP不能取代OOP,它只是OOP的补充和扩展
2. AOP术语
方面 Aspect: 相当于OOP中的类,就是封装用于横插入系统的功能
通知 Advice: 用于横切的代码不能写在方法中,而要写在和方法类似的实体中,称为通知
Jointpoint:连接点:
切入点(Pointcut):
目标(Target):
代理(Proxy):
织入(Weaving)
3. 4种通知(Advice)
前置通知MethodBeforeAdvice,
后置通知AfterReturningAdvice,
环绕通知AroundAdvice,
异常通知ExceptionAdvice
会传入方法名,参数
要拦截的类和方法
public interface MyInterface
{
public String getHello(String name);
public int getRandomInt(int max);
}
public class MyClass implements MyInterface
{
public String getHello(String name)
{
.......
}
public int getRandomInt(int max)
{
......
}
}
4. 拦截方法
public class BeforeAdvice impleemnts MethodBeforeAdvice
{
public void before(Method method, Object[] args, Object target) throws Throwable
{
System.out.println("beforeAdvice:" + target.getClass().getName() +"." + method.getName() + " 参数值:“ + 啊如果是[0]);
if(method.getName().equals("getHello")
{
args[0] = "chao ren";
}
}
}
5. 装配
<bean id="myClass" class="company.MyClass"/>
<bean id="MyClassProxy" class="org.springframework.aop.framework.Proxy.FactoryBean">
<property name="proxyInterfaces">
<list>
<value>company.MyInterface</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>beforeAdvice</value>
<value>afterAdvice</value>
<value>exceptionAdvice</value>
</list>
</property>
<property name="target">
<ref bean="myClass"/>
</property>
</bean>
7. 调用
MyInterface myInterface = (MyInterface) context.getBean("myClassProxy");
myInterface.getHello("bill");
myInterface.getRandomInt(100);
8. Spring AOP 拦截了目标类中的所有方法,而通常只需要拦截部分的方法
NameMatchMethodPointcut , 通过该切入点,可以拦截指定方法
public class Pointcut extends NameMatchMethodPointcut
{
@Override
public boolean matches (Method method, Class targetClass)
{
this.setMappedName("getHello");
this.setMappedName("get*");
return super.matches(method,targetClass);
}
}
装配
<bean id="pointcu" class="mycomoany.Pointcut/>
<bean id="myAdvisor" class="...DefaultPointAdvisor">
<property name="pointcut">
<ref local="pointcut"/>
</property>
<property name="advice">
<ref local="beforeAdvice"/>
</property>
</bean>
<bean id="MyClassProxy" class="org.springframework.aop.framework.Proxy.FactoryBean">
<property name="proxyInterfaces">
<list>
<value>company.MyInterface</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>myAdvisor</value>
<value>afterAdvice</value>
<value>aroundAdvice</value>
<value>exceptionAdvice</value>
</list>
</property>
<property name="target">
<ref bean="myClass"/>
</property>
</bean>
9. 使用控制流切入点
更具要调用被拦截方法的类, 调用被拦截方法的方法, 来拦截
ControllFlowPointcut
分享到:
相关推荐
**Spring AOP基础** 在Java开发中,Spring框架以其强大的功能和灵活性被广泛使用,而Spring AOP(面向切面编程)是其重要组成部分之一。AOP允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、权限检查等...
Spring AOP 基础关于 AOP 是什么的理解 AOP(Aspect Oriented Programming 面向方面的编程)是一种实现横切面的工具,它是 OOP 的补充,而不是 OOP 的竞争对手。AOP 的出现是为了解决 OOP 中的缺陷,即 OOP 中的类...
多年前搜到的一个AOP教程,代码和理论结合,浅显易懂,非常经典
在本章"Spring AOP 基础1"中,我们主要探讨了Spring AOP(面向切面编程)的核心概念和实现方式。AOP是一种编程范式,它允许程序员定义"切面",这些切面封装了跨越多个对象的横切关注点,如日志、事务管理等。以下是...
动态代理是AOP实现的基础。在Java中,有JDK动态代理和CGLIB动态代理两种方式。JDK动态代理基于接口实现,如果目标对象实现了至少一个接口,Spring就会使用JDK动态代理来创建代理对象。如果没有接口,Spring则会使用...
在IT领域,面向切面...通过学习和实践这个“Aop基础实例”,你不仅能掌握AOP的基本概念,还能了解到在Java环境中如何利用现有的工具和技术实现AOP的功能。这将对你在处理复杂系统和提升代码质量方面提供很大的帮助。
下面我们将详细探讨AOP的基础知识以及如何在Spring中配置AOP。 首先,让我们了解一下AOP的基本概念: 1. **切面**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。 2. **连接点(Join Point)**:...
Spring Aop基于annotation注解练习
面向切面编程 (Aspect Oriented Programming, AOP) 是一种编程范式,旨在通过将横切关注点(如日志记录、安全控制、事务管理等)从业务逻辑中分离出来,提高系统的模块化程度。 #### AOP 在 Spring 中的实现 ...
Spring Aop基于xml练习
1,spring是一个开源的免费的框架(容器)。 2,spring是一个轻量级的,非入侵式的框架。 非入侵式:就是项目引入了这个框架之后,...总结:spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。
二、Spring AOP基础 在Spring中,AOP的实现依赖于两个主要组件:通知(Advice)和切点(Pointcut)。通知是实际执行的增强代码,如方法调用前的记录日志;切点是通知应该应用到的方法或类。Spring支持五种类型的的...
package demo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
Spring AOP 基础概念** - **切面(Aspect)**:切面是关注点的模块化,比如日志、事务管理等,这些关注点可以被定义为一个独立的模块,称为切面。 - **通知(Advice)**:在特定连接点上执行的代码,也就是切面要...
一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,用于处理系统中的横切关注点,即那些跨越多个类或方法的共同功能,如事务管理、日志记录等。AOP通过切面(Aspect)将这些关注点与业务逻辑分离,提高...
1. **AOP基础概念**: - **切面(Aspect)**:是AOP的核心,它封装了特定的关注点,如日志、事务管理等。 - **通知(Advice)**:在特定的连接点执行的代码,例如,前置通知(before)在方法执行前运行,后置通知...
4. ch18_aop:可能是关于AOP基础理论或具体实现的章节。 5. ch19_aotowire:虽然名称中包含"AOP",但"AOT"通常指的是" Ahead Of Time",可能是关于Spring的自动装配(Auto-Wiring)功能,这个与AOP相关但不直接属于...
AOP 基础概念** - **切面(Aspect)**:AOP 中的核心概念,它封装了横切关注点,如事务管理、日志记录等。 - **连接点(Join Point)**:程序执行中的特定点,如方法调用、异常处理等。 - **通知(Advice)**:在...
本书以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后详细讲解AspectWerkz、AspectJ、Spring框架的AOP应用开发技术。 随书附赠的光盘内容为本书开发的案例程序包。本书内容循序...
Spring AOP(面向切面编程)是Spring框架的一个核心组件,它允许开发者在不改变原有代码的情况下,通过预编译和运行期动态代理技术,向程序中动态地添加额外的功能。本教程主要介绍AOP的基本概念,使用代理模式实现...