`
smileShrap
  • 浏览: 1127 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

缓存bean

阅读更多
import java.io.InputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class ResourceCache {
private static ResourceCache instance = null;
private static Log log = LogFactory.getLog(ResourceCache.class);
private static Cache cache = null;
private static CacheManager manager = null;

/**
* Instantiates a new flash data cache.
*
* @throws Exception
*/
private ResourceCache() throws Exception {
try {
InputStream configFile = ResourceCache.class.getClassLoader()
.getResourceAsStream("ehcache.xml");
manager = CacheManager.create(configFile);
cache = manager.getCache("authorities");
} catch (Exception e) {
throw new Exception("得到cache失败!", e);
}
}

public static ResourceCache getInstance() throws Exception {

if (instance == null) {
instance = new ResourceCache();
// jvm关闭时才执行此钩子,但对象已经被�?��,会抛出空指�?
// Runtime.getRuntime().addShutdownHook(new Thread(){
// public void run(){
// FlashDataCache.manager.shutdown();
// }
// });
}
return instance;
}

public void putData(String key, Object value) {
try {
Element element = new Element(key, value);
cache.put(element);
cache.flush();
} catch (IllegalArgumentException e) {
log.error("放入缓存失败", e);
e.printStackTrace();
} catch (IllegalStateException e) {
log.error("放入缓存失败", e);
e.printStackTrace();
} catch (CacheException e) {
log.error("放入缓存失败", e);
e.printStackTrace();
}
}

public Object getData(String key) {
Object bean = null;
try {
Element element = cache.get(key);
if (element != null) {
bean = element.getValue();
}
} catch (IllegalStateException e) {
bean = null;
log.error("取出缓存失败", e);
e.printStackTrace();
} catch (CacheException e) {
bean = null;
log.error("取出缓存失败", e);
e.printStackTrace();
}
return bean;
}

public static void destroy() {
ResourceCache.manager.shutdown();
}

public static void main(String[] args) throws Exception {
ResourceCache.getInstance().putData("x", "chenghui");
System.out.println(ResourceCache.getInstance());
System.out.println(ResourceCache.getInstance());
System.out.println(ResourceCache.getInstance().getData("x"));
}
分享到:
评论

相关推荐

    Spring源码最难问题:当Spring AOP遇上循环依赖.docx

    这是因为三级缓存的存在意义是为了解决循环依赖问题,而不是简单地缓存bean实例。 在三级缓存中,ObjectFactory会将bean的实例经过SmartInstantiationAwareBeanPostProcessor的getEarlyBeanReference方法处理,从而...

    Spring getBean流程图1

    8. **缓存Bean**:最后,实例化的Bean会被放入BeanFactory的缓存中,以便后续的`getBean`请求可以直接从缓存中获取,提高性能。 9. **结束**:完成上述流程后,`getBean`方法返回实例化的Bean,用户就可以在代码中...

    Spring的BeanFactory的接口注解

    - **应用场景**: 当需要控制是否缓存Bean定义信息时使用,有助于性能优化。 ##### 12. `void applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException;` - **...

    EJB设计模式

    它可以缓存bean引用,提高性能,同时简化客户端代码,使其不必了解bean的具体位置。 11. **数据传输对象(DTO,Data Transfer Object)** DTO用于在EJB和客户端之间传递大量数据,避免了直接暴露EJB接口给客户端的...

    singleton Bean 创建 prototype Bean

    3. 当其他Bean需要依赖这个Singleton Bean时,容器直接从缓存中取出已创建的实例,无需再次创建。 Prototype Bean则相反,每次通过容器请求一个Prototype Bean时,容器都会创建一个新的实例。这种方式适用于那些每...

    spring简单的缓存

    例如,如果选择EhCache作为缓存管理器,需要添加对应的bean定义,并配置相关的属性,如缓存的名称、大小限制等。 3. **使用缓存注解**: - `@Cacheable`:此注解用于标记那些结果可以被缓存的方法。当方法被调用时...

    用ejb实现用户登录

    例如,当客户端首次请求`UserSessionBean`时,容器会实例化一个bean,处理完请求后,容器可能会缓存bean以备后续请求,或者根据配置决定何时销毁。 5. **事务管理** EJB支持自动事务处理,确保数据操作的原子性和...

    Struts2的常量详解

    struts.objectFactory.spring.useClassCache 属性指定整合 Spring 框架时,是否缓存 Bean 实例,该属性只允许使用 true 和 false 两个属性值,它的默认值是 true。 7. struts.objectTypeDeterminer struts....

    struts.properties文件详解

    6. `struts.objectFactory.spring.useClassCache`: 当整合 Spring 时,此属性决定是否缓存 Bean 实例。默认为 `true`,一般不建议更改。 7. `struts.objectTypeDeterminer`: 定义 Struts2 如何识别对象类型,可以是...

    Spring如何与struts2结合

    此外,还可以通过`struts.objectFactory.spring.useClassCache`来控制是否缓存Bean实例,默认值为`true`,一般不建议改动。另一个配置项`struts.objectFactory.spring.autoWire`用于指定Spring的装配模式,如"name...

    struts2属性文件中的有效的struts2属性KEY和带占位符的资源文件[参考].pdf

    6. `struts.objectFactory.spring.useClassCache`: 当整合Spring时,决定是否缓存Bean实例。默认为`true`,一般不建议改动。 7. `struts.objectTypeDeterminer`: 指定类型检测机制,可以选择`tiger`或`notiger`。`...

    struts.properties详解

    - **struts.objectFactory.spring.useClassCache**:该属性决定在整合Spring框架时是否缓存Bean实例,默认为`true`。一般情况下,建议保留默认值以提高性能。 #### 4. struts.objectTypeDeterminer - **作用**:该...

    Struts2属性文件详解

    此属性决定了在整合Spring框架时,是否缓存Bean实例。默认情况下,该属性值为`true`,意味着缓存Bean实例。通常情况下,不建议更改此默认设置。 #### struts.objectTypeDeterminer 该属性指定了Struts 2的对象类型...

    java shiro实现退出登陆清空缓存

    这里没有给出具体的缓存清理代码,因为实际应用中可能涉及不同的缓存实现(如 Redis、Memcached 或 Ehcache),清理缓存的方法会因缓存技术而异。 总之,通过扩展 Shiro 的 `LogoutFilter`,我们可以在用户登出时...

    spring缓存机制-自定义缓存(五, 六)

    3. 注册`CacheManager`:在Spring配置中,使用`@Bean`注解注册你的自定义`CacheManager`,这样Spring就能在运行时使用它来管理缓存。 三、自定义缓存策略 除了自定义`CacheManager`外,我们还可以通过实现`...

    Spring集成的Hibernate配置二级缓存

    3. **配置Spring整合Hibernate**:在Spring的配置文件(如applicationContext.xml)中,我们需要配置Hibernate SessionFactory,并指定缓存相关的bean。例如: ```xml <bean id="sessionFactory" class="org....

    详解Spring中bean的作用域

    这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该 bean 的后续请求和引用都将返回被缓存的对象实例。 例如:<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/> ...

    Spring IOC原理补充说明(循环依赖、Bean作用域等)

    Spring通过缓存Bean实例来实现单例,因此在处理循环依赖时,可以利用缓存的实例来避免无限递归。 - **Prototype**:原型,每次请求都会创建一个新的Bean实例。由于可能存在多个实例,Spring不会尝试解决循环依赖,...

    spring的bean作用域

    这意味着,无论何时,只要Spring容器被初始化,它都会创建一个Bean实例,并将其缓存起来。后续对相同ID的Bean的所有请求都会返回同一个实例。这种方式类似于设计模式中的单例模式,但不同之处在于,这里的"单例"是指...

    spring二级缓存

    使用`<cache:annotation-driven/>`元素开启基于注解的缓存控制,并通过`<bean>`标签配置EhCache的`CacheManager`。 4. **实体类和DAO层的缓存配置**:在Hibernate的实体类上,可以使用`@Cacheable`、`@CacheEvict`...

Global site tag (gtag.js) - Google Analytics