我试图获得一个关于Spring代理如何工作的高级视图。为什么我应该在我的应用程序中使用“API接口&Impl bean”模式或者只使用“bean类”模式。我读了不少这样的答案,但它们都很古老,我相信大多数与Java7和Spring3.x相关。我想知道在2020年,Java11+与Spring5.x(Spring Boot2.x)仍然有什么关系。是否有“最佳做法”可循?
此外,由于@functionalinterface
的可用性,如果我有实现consumer
、function
、predicate
等接口的bean,那么使用@autowire/@inject
consumer
代替foo
是否有意义,因为foo实现consumer
。这只是一个例子,我也可能使用我自己的函数接口(带或不带泛型)。
考虑到上述所有内容,我还想知道Spring创建的每个bean是否都是代理的,或者如果实际上不需要的话Spring创建bean而不代理它们。为了前任。如果一个类只是用@component
注释并直接注入,没有其他注释或代理要求,那么spring还会为这个bean创建代理吗?
@Component
@RequiredArgsConstructor // From lombok
class Foo extends Consumer<Bar> {
// Some private final Fields
public void accept(Bar bar) {
// do something
}
// Some private methods, no other public method
}
@Component
@RequiredArgsConstructor // From lombok
class AnotherFoo {
private final Foo foo;
// Use foo only to call foo.accept(bar)
}
@Component
@RequiredArgsConstructor // From lombok
class AnotherFoo {
private final Consumer<Bar> foo;
// Use foo only to call foo.accept(bar)
}
如果您想了解Spring代理是如何工作的,我有两个来源供您参考:
问题内容: 春季版 :3.2.4.RELEASE和3.2.9.RELEASE Mockito版本 :1.8.5 我一直在尝试将H2测试引入一个用于集成测试的旧项目,并且遇到了一些问题。由于事务传播的方式,我需要模拟一个自动装配的类。我以前做过,但是现在遇到了严重的问题。初始化测试时将引发以下错误消息: org.springframework.beans.factory.BeanCreationEx
我不明白为什么我所有的bean在控制器中都是空的。我知道这是一个常见的问题,但我不是用实例化对象。 控制器: 当我请求我在上收到一个NullPointerException。 我的服务 网络配置 主要的 启动应用程序时,我可以在日志中看到bean实际上正在自动连接到控制器: 所以我不明白为什么当我试图访问控制器中的时,它是空的。我不会在任何地方用实例化控制器。 裁剪异常 编辑: 我已经删除了网页。
默认情况下,Spring创建的Bean是singleton。它们是线程安全的,因为它们是无状态的。当我们希望Spring创建有状态Bean时,我们需要为Bean定义使用原型范围。我们需要为他们解决线程安全问题。当原型Bean注入所有无状态Bean时,它们都会受到污染。所以,我无法想象我们可以在哪里使用原型范围。你能给出一些我们可以/需要使用springbean原型的典型场景吗?还有,我们如何避免对
问题内容: 更新:添加Maven依赖关系 * 更新:通过添加 Maven依赖关系 解决了该错误* 美好的一天。我有AplicationContext.xml的这一部分 Maven Dep春季和冬眠 但是,当我启动我的应用程序时,它告诉我这个错误 但是我正在使用hibernate4。这是什么魔术?=)我已经尝试过重新部署应用程序,但是结果是一样的 问题答案: 您已经错过了Spring-ORM模块:
我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务。 请开导我。
Java-Spring-骆驼 我想用服务列表发起骆驼路线。 想做下面的事情,但是< code>from方法似乎不是一个生产者。如何定义动态生产者?