3

以下のシナリオで春に注入する方法。

Class A{

public void doSomeThing(){
 B builder=new B();
 //call other function.
}

}

ここでは、B をクラス レベル オブジェクトとして作成したくありません。

Class A{
 B b;// dont want to bring b here
}

Spring context.getBean("B) または autowire; も使用したくありません。

したがって、Spring は次のように B を注入する必要があります。

Class A{

public void doSomeThing(){
 B builder=<injected by Spring>
 //call other function.
}

}

したがって、 B は doSomeThing() メソッドのスコープ内で作成および破棄されます。

4

3 に答える 3

2

あなたはApplictionContextそれを行うために使用することができます

Class A{
    @Autowire
    private ApplicationContext appContext;

    public void doSomeThing(){
        B builder=appContext.getBean(B.class);
    }
}

B呼び出すたびに異なるインスタンスが必要な場合は、Bean を BeanとしてappContext.getBean(B.class)定義する必要があります。Bprototype scoped

于 2013-02-27T15:37:33.037 に答える
0

春のルックアップメソッドでこれを行うことができます。抽象メソッド createB(); を作成します。そのクラスも抽象化しましたが、Spring が抽象クラスの具体的なプロキシ オブジェクトを作成することを心配する必要はありません。

<bean id="objB" class="com.package.Prototype" scope="prototype" />

<bean id="yourobject" class="com.package.YourClass">
    <lookup-method name="createB" bean="objB" />
</bean>
于 2015-05-18T09:42:09.137 に答える
0

したがって、おそらく次のようなものが必要です。

class A {
    B b;

    public void doSomething() {
        b.something();
    }

    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
}

class B {
    public void something() {
        System.out.println("something");
    }
}

XML構成は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  <bean id="a"  class="A">
    <property name="b" ref="b"/>
  </bean>

  <bean id="b" class="B"/>

</beans>
于 2013-02-27T15:41:35.003 に答える