HotSwappableTargetSource是一个可以动态替换的对象,这个类很有用,可以在运行期间动态替换目标对象。
如下配置:
<!-- 3. DynaProxy -->
<bean id="dynaProxy"
class="org.frame.base.annotation.support.EhCacheFactoryBean" init-method="init">
<property name="targetSource">
<ref bean = "targetSource"/>
</property>
</bean>
<!-- 默认配置 -->
<bean id="targetSource" class="org.springframework.aop.target.HotSwappableTargetSource" autowire="constructor" >
<constructor-arg>
<ref bean="testI"/>
</constructor-arg>
</bean>
新建一个ehcache的动态代理替换类
package org.frame.base.annotation.support;
import org.springframework.aop.target.HotSwappableTargetSource;
import org.springframework.context.ApplicationContext;
/**
* use new EhCacheDynaProxy<T>(ctx,factory,dynaint).getObject();
*
*
* @param <T>
*/
public class EhCacheDynaProxy<T> {
private String factory;
private String dynaint;
private ApplicationContext ctx;
public EhCacheDynaProxy(ApplicationContext ctx, String factory,
String dynaint) {
this.ctx = ctx;
this.factory = factory;
this.dynaint = dynaint;
}
@SuppressWarnings("unchecked")
public T getObject() throws Exception {
EhCacheFactoryBean dyna = (EhCacheFactoryBean) ctx.getBean(factory);
HotSwappableTargetSource targetSource = (HotSwappableTargetSource) ctx
.getBean("targetSource");
T intabc = (T) ctx.getBean(dynaint);
targetSource.swap(intabc);
dyna.setTargetSource(targetSource);
dyna.init();
intabc = (T) dyna.getObject();
return intabc;
}
}
测试代码如下:
/**
* 在当前Factory的都会cache.
*/
ApplicationContext cxt = new ClassPathXmlApplicationContext(new String[]{"annotation/ano.xml","annotation/bean.xml"});
//TestI testI = (TestI) cxt.getBean("testI");
TestI testI = (TestI)new EhCacheDynaProxy<Intabc>(cxt,"&dynaProxy","testI").getObject();
int a = 10;
int b = 11;
System.out.println(testI.add(a, b));
System.out.println(testI.add(a, b));
System.out.println(testI.xx(a));
System.out.println(testI.xx(a));
Intabc intabc = new EhCacheDynaProxy<Intabc>(cxt,"&dynaProxy","intabc").getObject();
System.out.println(intabc.test(a, b));
System.out.println(intabc.test(a, b));
可以看到EhCacheDynaProxy可以代理任何接口类,并动态的生成Ehcache代理对象,实现缓存.
分享到:
相关推荐
这篇博客"使用EJB+Annotation实现AOP的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...
基于Annotation的AOP实现是Spring框架的一个重要特性,它极大地简化了AOP的使用。在本篇文章中,我们将深入探讨基于Annotation的AOP实现,特别是动态代理的理念。 首先,了解什么是AOP。AOP的核心概念是“切面”...
在Spring框架中,有两种主要的方式来实现AOP:基于XML配置和基于注解。本篇“spring学习之五”主要介绍的是注解驱动的AOP实现。 1. **定义切面**:在Spring中,我们通常通过创建一个带有`@Aspect`注解的类来定义切...
NULL 博文链接:https://tianhei.iteye.com/blog/978969
在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...
本实例将详细探讨如何通过注解(Annotation)来实现Spring AOP的方法拦截。 一、Spring AOP基础 Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP...
这篇博客文章将探讨如何在Spring 2.0中使用AOP实例,特别是通过注解来实现。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了横切关注点,即那些跨越多个对象的行为或责任。在Spring中,切...
Spring mvc Aop+annotation实现系统日志记录功能实现的jar包asm-3.3.jar ,aspectjrt.jar , aspectjweaver.jar , cglib-nodep-2.1_3.jar , spring-aop.jar
结合使用注解和XML配置,开发者可以根据项目需求灵活选择合适的方式实现AOP。值得注意的是,Spring还支持自动代理和基于接口的代理,它们分别对应JDK动态代理和CGLIB代理,这决定了通知如何与目标对象交互。 总的来...
这个实例中的压缩包可能包含了配置文件、源代码和测试案例,你可以通过解压`demo-caching-with-spring-aop-master`来查看完整的实现,学习如何配置Spring AOP,以及如何定义和使用自定义缓存注解。 总的来说,...
本文将深入探讨如何结合Spring AOP与EhCache实现一个简单的缓存实例,以便优化Java应用的运行效率。 首先,让我们了解Spring AOP。Spring AOP是Spring框架的一部分,它允许我们在不修改业务代码的情况下,通过定义...
总之,通过Swoft2的AOP功能,我们可以轻松实现非侵入式的缓存管理,提升系统的响应速度,同时保持代码的清晰和可维护性。在设计和实现过程中,要充分考虑到缓存的一致性、性能优化和异常处理,确保系统在高并发环境...
本文将详细介绍如何在Spring中使用AOP,特别是通过注解的方式。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它封装了特定的关注点,如日志记录或事务管理。切点(Pointcut)定义了在何时应用...
本实例主要探讨的是使用XML配置的方式来实现AOP。XML配置虽然相比注解方式略显繁琐,但它提供了更大的灵活性,尤其是在需要对多个类或方法应用相同通知(Advice)时。 首先,我们需要在Spring的配置文件中启用AOP...
总结,AutoLoadCache是一个强大的缓存管理解决方案,通过AOP和注解实现了缓存与业务逻辑的解耦,同时提供了异步刷新和“拿来主义机制”来提升高并发环境下的性能。它为Java开发者提供了一种简单、高效的方式来管理和...
现在使用的缓存技术很多,比如Redis、 Memcache 、 EhCache等,甚至还有使用ConcurrentHashMap 或 HashTable 来实现缓存。但在缓存的使用上,每个人都有自己的实现方式,大部分是直接与业务代码绑定,随着业务...
Spring通过代理模式实现了AOP,可以自动在目标方法调用前后执行特定的逻辑,这为我们实现方法级别的缓存提供了可能。 1. **配置Ehcache** 在开始之前,确保已在项目中引入Ehcache的依赖。然后,需要配置Ehcache,...
在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...