@Primaryを使用してテストコンフィグレーションで宣言されたテスト中にSpring Beanをオーバーライドしようとしています。 1つの宣言はsrc/main/javaパスにあり、もう1つはsrc/test/javaパスにあります。SpringはプライマリBeanを非プライマリBeanでオーバーライドします
しかし、Springは意図的にプライマリBeanを非プライマリBeanに置き換えています。私はテストに使用したくないものです。本番(src/main/java)構成Beanをコメントアウトするだけで、必要に応じてテスト構成内の1次テスト(src/main/test)Beanが使用されます。 (明らかに私は、テストを実行するたびにコードをコメントアウトすることはできません。)ログから
:
osbfsDefaultListableBeanFactory - 異なる定義でBeanの「sqsConnectionFactory」Bean定義をオーバーライド:置き換え [ルートBean:クラス[null];スコープ=;抽象的な=偽; lazyInit = false; autowireMode = 3; dependencyCheck = 0; autowireCandidate = true; プライマリ=真; factoryBeanName = testJmsConfiguration; factoryMethodName = sqsConnectionFactory; initMethodName = null; destroyMethodName =(推論);クラスパスリソース[COM/FOO /構成/ TestJmsConfiguration.class]
[ルート豆:クラス[NULL]で定義されます。スコープ=;抽象的な=偽; lazyInit = false; autowireMode = 3; dependencyCheck = 0; autowireCandidate = true; プライマリ=偽; factoryBeanName = jmsConfiguration; factoryMethodName = sqsConnectionFactory; initMethodName = null; destroyMethodName =(推論);クラスパスリソースに定義されている[COM/fooの/設定/ JmsConfiguration.class]]
なぜ春は、非プライマリ豆を主な豆を交換して、どのように、具体的としてマークされたBeanを使用するように春、私は入手できますか主な豆?
編集: のsrc /メイン/ javaの構成:
@Configuration
public class JmsConfiguration {
... other bean declarations here ...
@Bean
public SQSConnectionFactory sqsConnectionFactory(Region region) throws JMSException {
return SQSConnectionFactory.builder()
.withRegion(region)
.build();
}
}
試験構成:
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = {"test"})
問題のあるテスト設定とテストクラスを追加してください。 – reos
同じ名前のBeanを作成する2つの異なるメソッド。その結果、動作が発生する可能性があります。 @Bean(name = "nameforbean") – alfcope
@alfcopeこれは答えです、ありがとう!これを回答として提出すれば、私はそれを正しいと認めます。私は、なぜプライマリとマークされたBeanをプライマリとマークされていないものに置き換えているかを知っているとき、Springがその動作を許可する理由を知らない。 – FiguringThisOut