当有多个具有相同名称/类型的bean时,我对Spring中的DI注入机制有点困惑。根据Pivotal“核心Spring”课程的考试幻灯片,Spring对相同豆子的行为可以归结为:
然而,在下面的示例中,Spring将忽略任何顺序注释,并从Import语句中最后提到的Config类注入bean。因此,我想知道导入注释中配置类的顺序是否会覆盖任何注释。还是我错过了另一个要点?非常感谢您的任何提示。感谢堆栈溢出!
主配置类
@Configuration
@Import({RogueConfig.class,RewardsConfig.class})
public class TestInfrastructureConfig {
// nothing interesting here, just importing configs
}
报酬配置
@Configuration
@Order(1)
public class RewardsConfig {
@Bean
public RewardNetwork rewardNetwork() {
System.out.println("This Bean has been loaded from: " + this.getClass().getName());
return new RewardNetworkImpl(null, null, null);
}
}
RogueConfig公司
@Configuration
@Order(2)
public class RogueConfig {
@Bean
public RewardNetwork rewardNetwork() {
System.out.println("This Bean has been loaded from: " + this.getClass().getName());
return new RewardNetworkImpl(null, null, null);
}
}
测试类别
public class RewardNetworkTests {
ApplicationContext applicationContext;
@BeforeEach
void setUp() {
applicationContext = SpringApplication.run(TestInfrastructureConfig.class);
}
@Test
void injectingRewardNetworkBeanWithOrdering() {
RewardNetwork rewardNetwork = applicationContext.getBean(RewardNetwork.class);
assertNotNull(rewardNetwork);
}
}
无论我分配了什么值,或者如果我使用了排序,结果总是:
此Bean已从:config加载。RewardsConfig$$EnhancerBySpringCGLIB$$62461c55
改变这一点的唯一方法是修改my TestInfrastructureConfig中的导入注释,如下所示:
导入({RewardsConfig.class,RogueConfig.class}),生成:
此Bean已从:config加载。RogueConfig$$EnhancerBySpringCGLIB$$6ca7bc89
我想知道需要做些什么才能使订单中定义的值生效。
我已经能够让Spring通过直接加载配置来使用订单注释(即使用导入无需绕过配置类):
@SpringJUnitConfig({RogueConfig.class, RewardsConfig.class})
public class CdiTest {
@Test
public void testCdiWithIdenticalBeans(@Autowired RewardNetwork rewardNetwork) {
assertThat(rewardNetwork).isNotNull();
}
}
通过RogueConfig类上的Order(2)注释,这个bean最后加载,如stdout所示:
此Bean已从:config加载。RogueConfig$$EnhancerBySpringCGLIB$$552b937f
似乎当在配置类中使用Import时,它将按照注释中提供的顺序加载bean定义,从而使相应配置类上的任何注释都无用。
如果我使用,那是什么意思?极高?
我想向Springbean注入一个单例对象依赖关系。问题是我无法访问和修改要注入其对象的类。让我描述一下这个例子。 所以我有我的接口,以及这个接口的实现,如下所示。 然后在我的配置类中,我正在创建一个bean,但是我需要在构造函数中向它传递对象,问题是我不能使成为bean,因为它来自外部包,我不能修改它。 所以我想做的是,能够将/autowire参数传递给bean。目前IntelliJ给我一个错误
17. Spring的bean以及依赖注入 您可以自由使用任何标准的Spring Framework技术来定义您的bean及其注入的依赖。为简单起见,我们经常发现结合@Autowired构造方法注入来使用@ComponentScan查找bean效果非常好。 如果您按照上述建议(将您的application类放置于根包中),则可以添加@ComponentScan注解而无需任何参数。您所有的程序组件(
我有一个Spring bean,在Spring Bean中我有一个对其他bean列表的依赖项。我的问题是:如何注入一个通用的bean列表作为该bean的依赖项? 例如,一些代码: 我的豆子: 问题是:;如何在Painter中获得颜色列表?另外,还有一点:我应该让@Configuration返回接口类型还是类? 谢谢你的帮助!
我有一个Spring启动应用程序,我最近从v1.3.3. RELEASE升级到v1.4.2. RELEASE。 用于我在v1中的集成测试。3.3,我有一个豆子,我能够成功地监视它。我在运行测试时,配置文件,下面的被激活,而不是应用程序的。 我正在升级到v1。4.2.发布并希望使用spyBean注释模拟单个方法,而不依赖于概要文件。 我对我的测试方法做了以下改变,以尝试它- 然而,当我尝试上述方法时
问题内容: Spring在以下方面很好地支持JUnit:使用和注释,事情看起来非常直观 该测试将能够在Eclipse&Maven中正确运行。我想知道TestNG是否有类似的东西。我正在考虑迁移到“下一代”框架,但没有找到与Spring测试匹配的对象。 问题答案: 它也可以与TestNG一起使用。