java - 为什么 Spring 中没有 DI 缓存就无法工作?

标签 java spring spring-boot

假设我有一个休息 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/

相关文章:

java - 将 Elasticsearch 与 Spring Boot 结合使用时出错

java - 无法调用 findByEmail 因为 "this.userRepository"是空错误

java - log4j2 找不到配置文件

java - arraylist循环不显示

java - 根据某些配置参数从代码中禁用缓存抽象

spring - 为什么 Maven 会下载不同版本的 Spring Artifact ?

java - spring boot - 在 META-INF/spring.factories 中找不到自动配置 - gradle

java - Groovy 文字正则表达式/\\/未编译

java - Remember Me with Spring Security 3.1.3 - 弃用的默认构造函数

spring - 无法在 Spring Boot 应用程序中查找 JNDI 数据源