当我从not bean类中的方法调用Cacheable方法时,我突然发现@Cacheable不起作用。
请在下面找到我的代码,并帮助我什么是问题或我错过的东西。
EmployeeDAO。java
@Component("employeeDAO")
public class EmployeeDAO {
private static EmployeeDAO staticEmployeeDAO;
public static EmployeeDAO getInstance(){
return staticEmployeeDAO;
}
@PostConstruct
void initStatic(){
staticEmployeeDAO = this;
}
@Cacheable(value = "employeeCache")
public List<Employee> getEmployees() {
Random random = new Random();
int randomid = random.nextInt(9999);
System.out.println("*** Creating a list of employees and returning the list ***");
List<Employee> employees = new ArrayList<Employee>(5);
employees.add(new Employee(randomid, "Ben", "Architect"));
employees.add(new Employee(randomid + 1, "Harley", "Programmer"));
employees.add(new Employee(randomid + 2, "Peter", "BusinessAnalyst"));
employees.add(new Employee(randomid + 3, "Sasi", "Manager"));
employees.add(new Employee(randomid + 4, "Abhi", "Designer"));
return employees;
}
MyThread.java
class MyThread{
public void run(){
//How to get Employee data. ?????
}
}
实用类。java
public class UtilityClass {
public static void getEmployee(){
EmployeeDAO.getInstance().getEmployees();
}
}
Main.java
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
EmployeeDAO dao = (EmployeeDAO)context.getBean("employeeDAO");
System.out.println("1'st call");
dao.getEmployees();
System.out.println("2'nd call");
dao.getEmployees();
System.out.println("Call cache method using utility class");
System.out.println("1'st call on utilityclass");
UtilityClass.getEmployee();
System.out.println("2'nd call on utilityclass");
UtilityClass.getEmployee();
}
}
输出:
1'st call
*** Creating a list of employees and returning the list ***
2'nd call
Call cache method using utility class
1'st call on utilityclass
*** Creating a list of employees and returning the list ***
2'nd call on utilityclass
*** Creating a list of employees and returning the list ***
有人能帮我吗?
Spring使用代理来应用AOP,但是代理是在构建bean之后创建的。
在您的带注释的方法中,您正在设置对这个bean的引用,但此时它是bean的未经验证的实例。您确实需要代理实例。
我还要指出,你的解决方案非常糟糕,无法通过我的QA检查。但这就是伊姆霍。
问题内容: 从同一bean的另一个方法调用缓存的方法时,Spring缓存不起作用。 这是一个示例,可以清楚地说明我的问题。 组态: 缓存的服务: 结果: 该方法调用使用缓存在第二次调用预期。但是,在类中()中调用该方法时,则未使用Cache。 这是Spring缓存的工作方式还是我缺少什么? 问题答案: 我相信这是这样的。从我记得阅读的内容来看,生成了一个代理类,该代理类可以拦截所有请求并使用缓存的
从同一bean的另一个方法调用缓存的方法时,Spring缓存不工作。 这里有一个例子来清楚地解释我的问题。 配置: 缓存服务: 结果: 方法调用在第二次调用中使用缓存。但是,当在AService类中调用方法时(在中),Cache未被使用。 这就是SpringCache的工作原理还是我遗漏了什么?
为什么spring对一个注释为@Cacheable的方法的一次调用执行我的定制@Cacheable密钥生成器两次,为什么不只执行一次。 我的KeyGenerator实现 我的方法用@Cacheable和自定义keyGenerator注释 spring Rest控制器,它调用用@cacheable注释的方法 当我用自定义的keyGenerator对用@Cacheable注释的方法进行一次调用时,我在
我有一个服务与下一个方法: 我从控制器中调用getTestWithId100方法,但它只获得新值。 部分ehcache.xml: 为什么它不工作?我尝试了不同的键,但没有成功。
我试图从同一个类中调用方法: 希望的结果也被缓存,但是注释被忽略,并且每次都执行方法。 我是做错了什么,还是故意的?
可能是问题似乎是重复的其他,但我已经检查了其他类似的问题,并尝试解决,但没有任何工作。 我正在使用缓存注释对服务类进行注释,如下所示: 我正在另一个服务类中自动生成CacheFacade。当我从那个类调用addRequest时,它可以工作,但当我调用getRequest时,它没有被调用,我尝试在那里添加日志和调试点,但流没有在那里。 这是我调用缓存服务类的主要服务类: 谁能告诉我,我做错了什么,为