0

私はクラスを持っています:


    public class Base
    {
    private MyExecutor executor;
    }

new 演算子を使用してクラス Base の新しいインスタンスを作成し、Spring によって注入された MyExecutor の同じシングルトン インスタンスを使用するにはどうすればよいですか?? 提案してください。

4

3 に答える 3

2

executor を非プロトタイプとして宣言します (つまり、シングルトンがデフォルトであるため、プロトタイプにしないでください)。ApplicationContext から Bean を取得し、それを のコンストラクターに渡しBaseます。

MyExecutor別のオプションは、Spring によって呼び出されるコンストラクターからの静的フィールドとしてシングルトン インスタンスを格納することです。次に、getInstance静的メソッドを提供します。

于 2013-05-13T10:56:46.880 に答える
1

これは、Spring がデフォルトで行うことであり、Bean の同じインスタンスを注入します。たとえば、以下の B1 と B2 は、MyExecutor Bean のスコープをsingletontoprototypeまたは other に変更しない限り、単純にデフォルトで MyExecutor Bean の同じインスタンスを取得します。

public class B1 {
    @Autowired
    private MyExecutor executor;
...

public class B2 {
    @Autowired
    private MyExecutor executor;
...    
于 2013-05-13T11:18:55.210 に答える
0

あなたはこれを行うことができます:

   ApplicationContext ctx = ...
    YourClass someBeanNotCreatedBySpring = ...
    ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
        someBeanNotCreatedBySpring,
        AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);

@AutowiredYourClass 内で etc を使用して、注入するフィールドなどを指定できます。

または、次の注釈を Base に追加@Autowired して、注入するフィールドを指定することもできます

@Configurable(preConstruction=true,dependencyCheck=true,autowire=Autowire.BY_TYPE)
@EnableSpringConfigured

そしてXMl構成で以下

<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver" aspectj-weaving="on"/>

また

<context:load-time-weaver aspectj-weaving="autodetect"/>

重要な概念は、有効にすることですLoad time weaving

ソース

于 2013-05-13T11:45:18.270 に答える