1

サーバーの起動時に作成されるクラスがあります。クライアント アプリケーションのエントリ メソッドとして機能します。この振る舞いを変えることはできません。

@Autowiredこのアンマネージド クラス内でSpring を使用したいのですが。アスペクトウィービングが進むべき道かもしれないと読みました. ログに応じてすでに実行されているようです:

2014-01-28 13:11:10,156 INFO org.springframework.context.weaving.DefaultContextLoadTimeWeaver: Using a reflective load-time weaver for class loader: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader

しかし、それでも私の注入されDaoたサービスはnull. 何が欠けている可能性がありますか?

@WebListener
public class MyContextListener implements ServletContextListener {
        @Override
            public void contextInitialized(ServletContextEvent sce) {
            new TestService().run(); //throws NPE
        }
}

@Configurable
class TestService extends AbstractLegacyService {       
    @Autowired
    private Dao dao;

    @Override
    public void run() {
        //dao is always null
        dao.find();
    }
}


@Component
class Doa dao;

ウィービングを有効にします (tomcat):

@Configuration
@EnableLoadTimeWeaving
@EnableSpringConfigured
public class AppConfig {
}
4

1 に答える 1

1

ContextLoaderListenerが呼び出される前に、が呼び出されていることを確認する必要がありMyContextListenerます。

ContextLoaderListenerスプリング コンテナーを初期化し、ロード時のウィーバーはTestService、スプリング コンテナーが初期化されている場合にのみ依存関係を注入できます。

于 2014-01-28T14:14:36.020 に答える