通过实现
org.aopalliance.intercept.MethodInterceptor接口来实现环绕通知:
public class CarAroundProxy implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("Skoda 4S shop");
Object result = invocation.proceed();
System.out.println("Give 200 maintenance coupon via around proxy");
return result;
}
}
Spring配置文件beans-around-proxy.xml:
<?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.xsd"
default-autowire="byName">
<bean id="car" class="com.john.spring.aop.Car">
<property name="name" value="Superb" />
<property name="price" value="220000" />
</bean>
<bean id="carAroundProxy" class="com.john.spring.aop.CarAroundProxy" />
<!-- 通过ProxyFactoryBean来生成实现指定接口,拦截指定对象方法的代理类 -->
<bean id="proxyBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"><!-- 代理需实现的接口 -->
<value>com.john.spring.aop.Vehicle</value>
</property>
<property name="interceptorNames"><!-- 拦截器名称列表 -->
<list>
<value>carAroundProxy</value>
</list>
</property>
<property name="target"><!-- 目标对象 -->
<ref bean="car" />
</property>
</bean>
</beans>
测试:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "beans-around-proxy.xml" });
Vehicle vehicle = (Vehicle) ctx.getBean("proxyBean");
vehicle.info();
}
输出:
Skoda 4S shop
Car name: Superb, price: 220000
Give 200 maintenance coupon via around proxy
调试程序,vehicle使用JDK的代理生成:
- 大小: 6.5 KB
分享到:
相关推荐
在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...
Spring AOP(面向切面编程)是Spring框架中的核心组件,它通过代理模式实现了对程序逻辑的非侵入式增强,使得开发者可以集中精力于业务逻辑,而将横切关注点(如日志、事务管理)剥离出来。本文将深入探讨Spring AOP...
在 Spring AOP 中,`ObjenesisCglibAopProxy` 类负责使用 CGLIB 创建代理对象,它会将一系列的 `MethodInterceptor` 注册为 `Callback`,这些 `MethodInterceptor` 执行了 AOP 的逻辑。 在 Spring AOP 的自动代理...
Spring提供了两种类型的代理:JDK动态代理和CGLIB代理。 8. **编织(Weaving)**:是指将通知插入到目标对象的过程。Spring AOP是在运行时完成的织入过程,即在程序运行时动态地添加通知。 #### 三、Spring AOP的...
Spring AOP支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **切点(Pointcut)**:切点是程序执行过程中的...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,Spring AOP会采用CGLIB来生成代理对象。CGLIB(Code Generation Library)是一个开源的代码生成库,它允许运行时在内存中...
总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...
动态代理则是Spring AOP实现的核心技术之一,它允许我们在运行时创建具有额外行为的对象。下面将详细阐述Spring AOP的配置以及动态代理的实现。 一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,...
在Spring AOP中,代理是实现切面的关键机制,它在目标对象与实际调用之间起到了中介作用,让我们来详细探讨Spring AOP的默认代理方式。 1. **静态代理**:Spring AOP 提供了两种代理方式,一种是静态代理,另一种是...
- **代理模式**:Spring AOP支持JDK动态代理和CGLIB代理,根据目标对象是否实现了接口来选择合适的代理方式。 - **自动代理生成**:Spring容器可以在启动时自动识别并生成代理对象,无需手动创建。 - **事务管理**...
3. Spring AOP的代理机制分为JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring会选择JDK动态代理;否则,使用CGLIB生成子类进行代理。 4. 通知的执行顺序可以通过`@Order`注解或`@Priority`注解来控制。Spring...
Spring AOP支持多种通知类型,包括前置通知、后置通知、异常通知、最终通知和环绕通知。 在实际开发中,配置Spring AOP可以通过XML或者基于注解的方式。XML配置文件中,可以定义<aop:config>元素来开启AOP支持,...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...
- `org.springframework.aop.framework.ProxyFactoryBean` 和 `org.springframework.aop.framework.JdkDynamicAopProxy` 是动态代理的关键类。 - `org.springframework.aop.aspectj.AspectJExpressionPointcut` ...
6. **代理(Proxy)**:Spring AOP通过动态创建代理对象来实现切面的功能。有JDK动态代理和CGLIB代理两种方式,JDK代理用于接口,CGLIB代理用于无接口类。 接下来,我们探讨如何在Spring中配置和使用AOP: 1. **...
1. **基于代理的AOP**:Spring提供了两种代理方式,JDK动态代理和CGLIB代理。JDK动态代理主要针对接口实现,而CGLIB代理则针对类实现。 2. **基于注解的AOP**:Spring 2.5开始支持注解驱动的AOP,通过在方法上使用`...
5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理,代理对象在调用目标方法时会自动插入切面逻辑。在Java项目中,Spring可以使用JDK动态代理或CGLIB动态代理来创建代理对象。 在实际应用中,...
通过以上介绍,我们可以看到Spring AOP的强大之处在于它简化了代码的组织和维护,使得横切关注点的实现更加优雅。了解并掌握这些概念,开发者可以有效地利用Spring AOP提升应用程序的可维护性和可扩展性。
- **代理(Proxy)**:Spring AOP 通过代理来实现对目标对象的增强,有 JDK 动态代理和 CGLIB 代理两种方式。 2. **AspectJ 1.6.12 Jar 包** `AspectJ` 是一个独立的 AOP 框架,提供了更强大的 AOP 支持,包括...