假设我有一个休息 Controller :
@RestController
public class FooController {
/* foobar instantiation/declaration goes here */
@RequestMapping("/foo")
public String bar(@RequestParam(value = "baz") String baz) {
return foobar.createResponse(baz);
}
}
createResponse()
方法注释为 @Cacheable
。
当我像 private Foobar foobar = new Foobar();
这样实例化 foobar 时,缓存不起作用。
但是当使用像 @Autowired private Foobar foobar;
这样的东西时,缓存工作得很好。
我环顾四周,据我所知,Spring 中的缓存使用代理类。所以我的问题是如果没有某种依赖注入(inject)就不能使用缓存吗?是不是因为Spring要注入(inject)代理类? 谢谢!
最佳答案
在 private Foobar foobar = new Foobar();
中,您正在创建一个新对象,而不是从 spring 容器中获取对象,因此不会有任何日志记录。
但是当您使用@Autowired private Foobar foobar;
时,您获取由spring容器创建的对象,spring将该对象注入(inject)到该引用中。
关于java - 为什么 Spring 中没有 DI 缓存就无法工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286091/