`

Annotation实现缓存,使用AOP的HotSwappableTargetSource

    博客分类:
  • JDK
 
阅读更多
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的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...

    基于annotation的aop实现

    基于Annotation的AOP实现是Spring框架的一个重要特性,它极大地简化了AOP的使用。在本篇文章中,我们将深入探讨基于Annotation的AOP实现,特别是动态代理的理念。 首先,了解什么是AOP。AOP的核心概念是“切面”...

    spring学习之五“AOP概念及使用Annotation的实现”

    在Spring框架中,有两种主要的方式来实现AOP:基于XML配置和基于注解。本篇“spring学习之五”主要介绍的是注解驱动的AOP实现。 1. **定义切面**:在Spring中,我们通常通过创建一个带有`@Aspect`注解的类来定义切...

    Spring采用Annotation方式实现AOP

    NULL 博文链接:https://tianhei.iteye.com/blog/978969

    Spring_Annotation_AOP

    在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...

    spring aop实例annotation方法实现

    本实例将详细探讨如何通过注解(Annotation)来实现Spring AOP的方法拦截。 一、Spring AOP基础 Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP...

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    这篇博客文章将探讨如何在Spring 2.0中使用AOP实例,特别是通过注解来实现。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了横切关注点,即那些跨越多个对象的行为或责任。在Spring中,切...

    Spring mvc Aop+annotation实现系统日志记录功能实现的jar包

    Spring mvc Aop+annotation实现系统日志记录功能实现的jar包asm-3.3.jar ,aspectjrt.jar , aspectjweaver.jar , cglib-nodep-2.1_3.jar , spring-aop.jar

    学习Spring笔记_AOP_Annotation实现和XML实现

    结合使用注解和XML配置,开发者可以根据项目需求灵活选择合适的方式实现AOP。值得注意的是,Spring还支持自动代理和基于接口的代理,它们分别对应JDK动态代理和CGLIB代理,这决定了通知如何与目标对象交互。 总的来...

    spring aop 自定义缓存实现

    这个实例中的压缩包可能包含了配置文件、源代码和测试案例,你可以通过解压`demo-caching-with-spring-aop-master`来查看完整的实现,学习如何配置Spring AOP,以及如何定义和使用自定义缓存注解。 总的来说,...

    SpringAOP结合ehCache实现简单缓存实例

    本文将深入探讨如何结合Spring AOP与EhCache实现一个简单的缓存实例,以便优化Java应用的运行效率。 首先,让我们了解Spring AOP。Spring AOP是Spring框架的一部分,它允许我们在不修改业务代码的情况下,通过定义...

    帮swoft2实现一个aop非侵入式的缓存方式

    总之,通过Swoft2的AOP功能,我们可以轻松实现非侵入式的缓存管理,提升系统的响应速度,同时保持代码的清晰和可维护性。在设计和实现过程中,要充分考虑到缓存的一致性、性能优化和异常处理,确保系统在高并发环境...

    spring中aop的简单使用(Annotation方式)

    本文将详细介绍如何在Spring中使用AOP,特别是通过注解的方式。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它封装了特定的关注点,如日志记录或事务管理。切点(Pointcut)定义了在何时应用...

    spring aop xml 实例

    本实例主要探讨的是使用XML配置的方式来实现AOP。XML配置虽然相比注解方式略显繁琐,但它提供了更大的灵活性,尤其是在需要对多个类或方法应用相同通知(Advice)时。 首先,我们需要在Spring的配置文件中启用AOP...

    AutoLoadCache是基于AOPAnnotation等技术实现的高效的缓存管理解决方案

    总结,AutoLoadCache是一个强大的缓存管理解决方案,通过AOP和注解实现了缓存与业务逻辑的解耦,同时提供了异步刷新和“拿来主义机制”来提升高并发环境下的性能。它为Java开发者提供了一种简单、高效的方式来管理和...

    高效的缓存管理解决方案AutoLoadCache.zip

    现在使用的缓存技术很多,比如Redis、 Memcache 、 EhCache等,甚至还有使用ConcurrentHashMap 或 HashTable 来实现缓存。但在缓存的使用上,每个人都有自己的实现方式,大部分是直接与业务代码绑定,随着业务...

    Spring 与Ehcache实现基于方法的缓存

    Spring通过代理模式实现了AOP,可以自动在目标方法调用前后执行特定的逻辑,这为我们实现方法级别的缓存提供了可能。 1. **配置Ehcache** 在开始之前,确保已在项目中引入Ehcache的依赖。然后,需要配置Ehcache,...

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

Global site tag (gtag.js) - Google Analytics