回答:
これは、のautowireBean()
メソッドを使用して行うことができますAutowireCapableBeanFactory
。任意のオブジェクトを渡すと、Springはそれをそれ自体が作成したもののように扱い、さまざまな自動配線のビットやピースを適用します。
を手に入れるにはAutowireCapableBeanFactory
、それを自動配線するだけです:
private @Autowired AutowireCapableBeanFactory beanFactory;
public void doStuff() {
MyBean obj = new MyBean();
beanFactory.autowireBean(obj);
// obj will now have its dependencies autowired.
}
code
プライベート@Autowired AnotherBean Bean; public void doStuff(){MyBean obj = new MyBean(bean); } code
。これらのすべての注釈と同じように思われ、人々は本当に混乱し、1日目からJava SDKにあった基本的なパターンを使用しません:(
MyClassに@Configurableアノテーションを付けることもできます。
@Configurable
public class MyClass {
@Autowired private AnotherClass instance
}
次に、作成時に依存関係を自動的に挿入します。また<context:spring-configured/>
、アプリケーションコンテキストxmlにも必要です。
<context:spring-configured/>
ますか?
@ glaz666の回答で述べられている@Configurable
アプローチに従う私のソリューションを共有したかったので、briefly
Spring Neo4j & Aop starts
(とにかく関係ありません)Spring Boot
を使用@Configurable
する準備ができたら、Beanをインスタンス化します(を使用ApplicationRunner
)機能させるには、以下の手順に従う必要がありました
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
あなたの上に置かれるようにBean
手動でインスタンス化することです。私の場合、Bean
手動でインスタンス化されるものには@Autowired
サービスがあるため、上記の注釈の小道具です。XXXApplicaiton.java
(またはでアノテートされたファイルを@SpringBootApplication
持つ)@EnableSpringConfigured
と、@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
し、compile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
は、@Configurable
どこにでも注釈が付けられており、その依存関係は自動配線されているはずです。*上記のポイント#3に関して、私は(ここでmavencentralに示されているように)org.springframework.boot:spring-boot-starter-aop
推移的にプルすることを認識していspring-aop
ますが、私の場合、Eclipseが注釈を解決できなかったため、スターターに加えて依存関係を明示的に追加しました。同じ問題に直面した場合は、依存関係を宣言するか、理解するという冒険に進んでください@EnableSpringConfigured
spring-aop
org.springframework.context.annotation.aspect.*
利用できない