java - Spring 和 Guice : when DI frameworks create proxies?

标签 java spring proxy guice

我们知道 DI 框架,例如 Spring 和 Guice 有时会创建代理而不是 beans。要在 equals 和 hashcode 方法中比较这些代理,我们应该使用 instanceOf 运算符,因为它们的类不再与原始类相同。 此外(可能)这些代理可能会在一些未初始化的状态下创建,就像 Hibernate 代理一样(这只是我的猜测)。

我只知道 Spring 创建 bean 代理的一种情况:当您使用 @Configuration 注释它时。 还有其他类似情况吗? Spring 是否创建未初始化的代理,这些代理仅在访问这些字段后才初始化它们的字段?

我发现了一个类似的问题:When does Spring creates proxies in the bean's lifecycle? ,但请注意,它与 AOP 使用案例有关。我问的是不涉及 AOP 的简单 DI 用法。

Guice 同样的问题!

最佳答案

每次您使用诸如 @Transactional@Cacheable 的注解时,Spring 都会使用代理。它的 AOP 与需要后期编译或编织的复杂 AOP 无关。

无论如何,请注意,如果您在您的某个服务中 Autowiring 了一个存储库,并且在服务中您创建了一个类在您设置存储库的位置,这将自动用作代理(如果有注释需要它)。

关于Guice,答案在@Oliver的评论里。

关于java - Spring 和 Guice : when DI frameworks create proxies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39947729/

相关文章:

java - 无法将类型 'java.lang.String' 的值转换为所需的模型对象类型

java - 添加WebSecurityConfigurerAdapter时Spring security默认登录表单消失

C# Web 应用程序 -> 代理所有请求 -> 从另一个 Web 应用程序返回内容(反向代理)

java - android - 仅在 Chrome 浏览器中搜索单词

java - 如何集成不同的布局管理器以适应这种情况?

java - 如何根据这种特殊的 equals 逻辑重写 hashcode 方法

firefox - WebRTC 是否会在没有用户交互的情况下泄露您的真实 IP?

java - JFace TreeView 删除项目

java - 如何在 JUnit 测试中重复捕获循环中的参数?

java - HttpClient:如何从现有连接获取底层套接字?