0

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

@Service
public class TestService{

    @Autowired
    private Integer size;

    private MyClass myObject;

    public Test(){
        // Default constructor for Spring
    }

    public Test(MyClass myObject){
        this.myObject = myObject;
    }

    // Getters and Setters ...

}

今、私はTestServiceこのクラスの外から自分をインスタンス化しています

new TestService(myObject);

sizeもちろん、変数はですnull。ただし、オブジェクト全体を注入しなかったとしても、Springコンテキストから注入したいと思います。

常にいくつかのフィールドを挿入することは可能ですか?

4

3 に答える 3

3

最も簡単な方法は、静的なAspectJコンパイル(またはロード時間ウィービング)@Configurable@Configurableを使用することです。:アノテーション付きのオブジェクトは、インスタンス化された場合でも自動配線されます。new()

しかし、より伝統的な方法は、プログラムで接続することです。

MyBean foo = new MyBean();
ApplicationContext ctx = // whereever you get your context from
ctx.getAutowireCapableBeanFactory().autowireBean(foo);
于 2011-05-06T07:39:12.803 に答える
1

はい、次を使用して自動配線プロセスで任意のオブジェクトを配置できます。

appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)

appContextただし、これを行うには、への参照が必要です。これはあなた次第です。

より洗練された方法は、AspectJとを使用してロード時のウィービングを使用することです@Configurableが、これにはより多くの構成作業が必要です-ドキュメントを参照してください。

于 2011-05-06T07:42:05.780 に答える
0

私はそれが可能だとは思わない。Springがインスタンス化するオブジェクトのみが、Springがライフサイクルを管理するオブジェクトです。つまり、Springには、そのオブジェクトをインスタンス化したことを知る方法がありません。JVM自体に接続されている場合は、それを実行できますが、実行できません。そして哲学的には、IoCがどのように書かれているかではなく、今後も書かれるでしょう。

于 2011-05-06T07:38:28.363 に答える