Spring CGLIB 增强 bean 中的构造函数注入字段为 null

Mic*_*ung 4 java spring

我有这个存储库:

@Repository
public class MyRepository {

  private final NamedParameterJdbcTemplate namedParameterJdbcTemplate;

  public MyRepository(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
    this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
  }

  void doSomething() {
    namedParameterJdbcTemplate.update(...);
  }
}
Run Code Online (Sandbox Code Playgroud)

它在 Spring Boot 1.4.5(Spring Core 和 JDBC 4.3.7)中按预期工作。调试时doSomething(),我可以看到 的实例MyRepository 是一个普通对象,并且namedParameterJdbcTemplate已设置。

但是,一旦我更新到 Spring Boot 1.4.6 (Spring Core & JDBC 4.3.8) 或更高版本, 的实例 MyRepository 就是 aMyRepository$$EnhancerBySpringCGLIB并且namedParameterJdbcTemplatenull。我看到它被注入到构造函数中,但是,此时我的存储库尚未增强 CGLIB。

这是为什么?我在4.3.8 版本发行说明中找不到任何提示。

Fel*_*ati 5

我有一些相关的事情。我的方法是最终的,因此,Spring 使用 CGLIB 代理类而不是默认行为(Spring AOP 代理类)。因此,要访问类属性,我必须调用 getXXX() 方法,否则每次尝试访问该属性时都会返回null 。