我剛開始使用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";
}
}
}
這是一個自定義的豆,我將用戶密鑰生成:
@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;
}
}
主要方法:
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()));
}
當我正在從主要的方法時,設置臨時的值的程序。我將keyGenerator類中的鍵作爲null_null_getDetails而不是ABC_DEF_getDetails。
但我需要的鑰匙是由我預先填寫在自定義的bean temp中的值組成的。
問題是相關的,與使用「新」創建自己的類的實例。當你執行generate = new temp();那麼spring不會管理這個實例。所以它不像你期望的那樣是@autowired。 –
感謝您輸入它的工作 – sid297