2017-08-13 8 views
2

@Autowiredを使用できないため、ヘルパークラスでBeanを取得する最善の方法は何ですか? 私が今やっていることは、@ Service/@ Component /にautowireしてから、そのBeanをコンストラクタでヘルパークラスに渡すことです。私はそれが通過するには余りにも多くのものがあるかもしれないので、それを行うのは正しい方法だとは思わない。Springを使用してヘルパークラスでautowired beanを取得する方法

これを行う最善の方法は何ですか?

答えて

2

を使用しています。このクラスには@Configurable(AspectJが必要)を使用するオプションがあります。 Take a look at the Documentation for more info

+0

例:私は@Serviceの1つのメソッドにあまりにも多くのコードがあり、私はそれから新しいクラス(Videoを表すクラス)を作成したいと思います。私は "新しい"演算子でそれをやって、そのオブジェクトをコンストラクタに渡していますが、そのクラスでオートワイヤリングを行うことはできないので、リポジトリに渡す必要もあります。この悪いことは何ですか? –

+0

専用のサービスBeanでこのロジックを抽象化できないのですか? – dimitrisli

+0

はい、それは私が最初に試みたものですが、プライベート変数と複数のプライベートメソッドを使用する必要があります。このことはサービスBeanで行う必要がありますか? –

1
public class SpringContextHolder implements ApplicationContextAware { 
    public static ApplicationContext applicationContext; 

    public void setApplicationContext(ApplicationContext applicationContext) { 
     SpringContextHolder.applicationContext = applicationContext; 
    } 
} 

<bean class="SpringContextHolder" lazy-init="false"/> xml構成。

SpringContextHolder.applicationContext.getBean(name)のような静的コンテキストを使用できます。

+0

プロトタイプスコープの使用はどうですか? –

+0

@RobertVangorそれは別のことです。多分この質問はあなたが望むものです。https://stackoverflow.com/questions/14156278/is-it-possible-to-retrieve-a-spring-bean-with-prototype-scope-without-using-appl – aristotll

0

ApplicationContetAwareを実装してアプリケーションコンテキストを取得し、それを(static?)変数に入れることができます。

applicationContextを静的にして、アプリケーションコンテキストも渡すことができます。

、私はヘルパークラスは、Spring管理ではないと仮定していますapplicationContext.getBean(...)

0

ヘルパークラスは単なる静的メソッド操作であると仮定します。ヘルパークラスの基本的な例は、静的メソッドを使用してプロセスを実行できることがわかっている場合はEmployeeUtil、ProductUtilなどです。 @Autowiredを使用してスキップし、静的な方法でアクセスします。

@Configurableは、AOPのロード時に使用されるマーカーです。この場合、オーバーヘッドになる可能性があります。

@Autowiredオブジェクトがまだ必要な場合は、newキーワードを使用するたびにオブジェクトを作成するのではなく、コンテナを挿入するとコードが明確になります。

関連する問題