我刚刚开始研究Spring缓存。
这是我在其中实现缓存的类:
@CacheConfig(cacheNames="empcache")
public class General {
@Cacheable
public String getDetails(int empId) {
if(empId==1) {
System.out.println("Inside getDetails. Emp id is 1.");
return "Amar";
} else {
System.out.println("Emp id is not 1.");
return "Anthony";
}
}
}这是一个自定义bean,我将使用它来生成密钥:
@Component
public class Temp {
private String name;
private String surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}我的context.xml
<context:component-scan base-package="com.packages.beans" />
<cache:annotation-driven key-generator="enhancedDefaultKeyGenerator"/>
<bean id ="enhancedDefaultKeyGenerator" class="com.packages.beans.myKeyGenerator"/>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
p:cache-manager-ref="ehcache"/>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:config-location="classpath:ehcache.xml" p:shared="true"/>下面是自定义密钥生成类:
public class MyKeyGenerator implements KeyGenerator {
@Autowired
private Temp temp1;
@Override
public Object generate(Object arg0, Method arg1, Object... arg2) {
String key = temp1.getName() + temp1.getSurname() + "_" + arg1.getName();
System.out.println("key is "+key);
return key;
}
}Main方法:
public static void main(String args[])
{
Temp generate=new Temp();
generate.setName("ABC");
generate.setSurname("DEF");
ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
General main=(General) context.getBean("mybean");
System.out.println(main.getDetails(main.getEmpId()));
}当我从main方法运行程序时,在其中设置temp的值。我在keyGenerator类中以null_null_getDetails而不是ABC_DEF_getDetails的身份获取密钥。
但是我需要这个键由我在自定义bean temp中预先填充的值组成。
发布于 2016-02-26 03:09:57
您在main中创建的“Temp”不是spring上下文的一部分。相反,spring从创建一个bean‘temp
@Component
public class Temp但是他们的名字和姓氏是空的。这个Temp实例用于您的keyGenerator,这就是为什么您在键中获取空值的原因。
您必须使用已设置的名称和姓氏创建Temp的bean。在java config中,您可以这样做:
@Bean
Temp temp() {
Temp generate=new Temp();
generate.setName("ABC");
generate.setSurname("DEF");
return temp;
}https://stackoverflow.com/questions/35635892
复制相似问题