我有这个存储库:
@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并且namedParameterJdbcTemplate是null。我看到它被注入到构造函数中,但是,此时我的存储库尚未增强 CGLIB。
这是为什么?我在4.3.8 版本发行说明中找不到任何提示。
我有一些相关的事情。我的方法是最终的,因此,Spring 使用 CGLIB 代理类而不是默认行为(Spring AOP 代理类)。因此,要访问类属性,我必须调用 getXXX() 方法,否则每次尝试访问该属性时都会返回null 。
| 归档时间: |
|
| 查看次数: |
2143 次 |
| 最近记录: |