问题标签 [spring-ioc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - bean 的所有@Configuration 命名规则是什么?
我有一些集成测试应该模拟出我系统中的许多 bean 之一。为此,我有一个@Configuration
看起来像这样的:
我注意到如果RealBean
是一个没有 @Component
. 但如果RealBean
是a @Component
,我必须将此上下文方法更改为如下所示:
谁能解释为什么我需要更改此方法名称以及在哪里可以找到所有这些规则?MockContext
解决这些“为什么我的工作不正常?”需要很长时间。问题。
FWIW,这是我在测试中使用此上下文的方式:
我的集成测试将扩展这个类。我正在使用 Spring Boot 1.2.4.RELEASE
java - 如何在 SpEL 中引用 ApplicationEventPublisher?
我想使用ApplicationEventPublisher#publishEvent()
Spring Web Flow 步骤发布应用程序事件。发布者通常是应用程序上下文,但除非必要(尤其是模拟),否则我宁愿不做出这种假设。是否有推荐的方法从 SpEL 表达式中引用发布者对象?
java - 弹簧默认范围单例与否?
您能否解释一下为什么 Spring 为如下所示的 bean 配置创建两个对象,因为默认情况下 spring 默认范围是单例的?
Spring配置在这里:
spring-ioc - 如何在 Spring IOC 中加载多个 xml bean 文件
如何在 springIOC 容器中加载多个 bean xml 配置文件(在 BeanFactory 或 AppilcationContext 中)。
java - Spring MVC 测试失败
我正在尝试运行 Spring MVC 测试,但不断收到此异常。
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.NullPointerException
发生异常是因为自动装配的依赖,
没有在测试中注入(在测试之外工作正常)。
谁能帮我这个。这是我的代码:
//AccountControllerITest 类
}
//账户控制器
}
谢谢您的帮助!
java - 在基于 Java 的配置中,Spring DI 在运行时而不是编译时解决依赖关系的美妙之处是否已经消失?
使用 Spring Dependency Injection,我们可以从代码中删除硬编码的依赖关系,并且可以在运行时而不是编译时解决依赖关系。
几年前,我们在一个为两个国家实施的项目中工作。除了一个模块 - 税收计算之外,几乎所有模块都是相同的。
该计划不是为两个不同的国家/地区打包两次,而是为这两个国家/地区仅打包一次项目。
所以我们有一个TaxCalculationService
接口和一种方法calculateTax(...)
TaxCalculationServiceImpl
实现TaxCalculationService
接口的两个国家的两个不同的类
就像下面一样
calculateTax(...)
我们从管理器类(TaxCalculationManagerImpl
)中调用了该方法。
我们有spring配置文件,它保存在战争之外的一个文件夹中,比如说/home/config/
两个war部署到两个不同的服务器上。同一个war,打包一次,唯一不同的是spring配置文件。
对于 B 国,我们需要用 bean id " taxCalculationService
" 修改类名,没有别的
因此,无需重新编译,打包我们很容易为两个国家使用相同的应用程序战争,只更改了 spring 配置文件。
但是在 Spring - Java Based Configuration 中,如果我们想实现相同的场景,我们将如何做到这一点?
在创建 bean 时,我们使用 new 运算符来创建特定的实现类。
如果我们对国家 A 使用相同的接口TaxCalculationService
和 TaxCalculationServiceImplForCountryA
类,那么我们必须像
对于 B 国,我们需要做这样的事情
所以在这种情况下,我们需要使用new 运算符为特定国家创建一个特定的 TaxCalculationService 实现类。因此,我们在基于 xml 的 spring 配置中拥有怎样的灵活性,无需重新编译、打包 war,我们重用了 war,这在基于 Java 的配置方法中是无法实现的。
taxCalculationManager 取决于 taxCalculationService 以及 taxCalculationManager 是否会调用 TaxCalculationServiceImplForCountryA 或 TaxCalculationServiceImplForCountryB 的 calculateTax(...) ,这将在运行时在基于 xml 的 spring 配置中决定。
但是,当我们必须在 java 代码中指定 getTaxCalculationService() 将返回 new TaxCalculationServiceImplForCountryA() 或 new TaxCalculationServiceImplForCountryB() 时,它基本上不会在运行时解析。
所以 taxCalculationManager 对 taxCalculationService 的依赖不是在运行时解决的,它基本上是在编译时解决的。
所以你不认为在Spring - Java Based Configuration 中 Spring DI 的美丽 - 在运行时而不是编译时解决依赖关系已经失去了吗?
java - 在构造函数中连接 bean 和值
我正在使用弹簧。我有这堂课:
我真的很讨厌接线属性,并且更喜欢使用构造函数,但是我想出的任何事情都得到一个奇怪的“类 FooService 中的构造函数 FooService 不能应用于给定类型”。在这种情况下可以使用建筑布线吗?
spring - 范围和在等级环境中
我读过了:
Spring MVC 中的 ApplicationContext 和 WebApplicationContext 有什么区别?
如果 <context:component-scan /> 在应用程序上下文而不是调度程序上下文中,@RequestMapping 注释不起作用(稍后会详细介绍)
和其他几个,但这些都没有回答这个问题:
<context:component-scan.../>
当 Spring MVC 应用程序的 ROOT 上下文中存在时,为什么范围是有限的?
我的理解是,它会导致扫描指定包中的所有类,并实例化任何使用其原型@Component
或其任何子原型(@Repository
和@Service
)的 bean @Controller
。
鉴于:
applicationContext.xml(根上下文)
main-servlet.xml(servlet 上下文)
com/myproject/web/MainController.java
Spring 文档声明在根上下文中实例化的任何 bean 都是共享的,并且可用于各个 servlet 应用程序上下文。因此,根上下文中的两个<context:...>
声明应该导致在 servlet 上下文中可见的 bean。但情况似乎并非如此。我需要在 servlet 上下文中<context:component-scan.../>
重复。<context:property-placeholder.../>
在 servlet 上下文中省略 会<context:component-scan.../>
导致
表示@Controller
未解决。
使用未处理的属性引用省略注释中的<context:property-placeholder.../>
结果@Value
,在我的情况下会导致一些断开的链接。
由于这两个<context:.../>
指令都会导致 bean 实例化,我很困惑为什么 bean 在子上下文中不可见,这与文档直接矛盾。此外,没有两个component-scan
语句会导致控制器 bean 被实例化两次吗?
关于@RequestMapping 注释不起作用,如果 <context:component-scan /> 在应用程序上下文而不是调度程序上下文中,我确实<mvc:annotation-driven />
在我的应用程序上下文中,并且这里的答案没有解释为什么component-scan
需要两个语句。
除非我完全理解它是如何工作的并且可以预测当我调整某些东西时它会如何表现,否则我对使用“魔法”感到非常不舒服。所以“两个地方都加就继续”的“解决方案”是不能接受的。
java - 一个spring初始化的bean能活多久?
当我在服务器上运行 bean 方法的第一个请求(比如说方法 A)时,一切似乎都很好,但是当第二次在这个 carrierRESTWS bean 上运行任何请求时(比如说方法 B),正在使用的 dao 是相同的运营商DAO 实例。每次调用这个carrierRESTWS bean时,我怎样才能避免出现这个问题并使注入使用一个新的dao实例?
xml文件中的bean配置:
java - 在 Spring IoC 容器中列出注入顺序
假设我正在注入一些 bean 的列表:
在这种情况下,默认注入顺序是什么?
我知道Ordered
接口和@Order
注释,我只询问默认行为。
我注意到的是,在手动 bean 注册的情况下:
这些 bean 的注入顺序与我注册它们的顺序完全相同:列表中的 1 个元素是 SomeBeanA,2 — SomeBeanB,3 — SomeBeanC。
这种行为有什么保证吗?我的意思是我可以确定它在进一步的版本中不会改变吗?
谢谢。