1. ホーム
  2. java

[解決済み] SpringのApplicationContextAwareはどのように動作するのでしょうか?

2023-05-22 20:29:29

質問

spring では、ビーンが ApplicationContextAware を実装している場合、そのビーンは applicationContext . したがって、他のビーンを取得することができる。 例

public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;     

    public void setApplicationContext(ApplicationContext context) throws BeansException {
      applicationContext = context;
    }

    public static ApplicationContext getApplicationContext() {
      return applicationContext;
    }
}

次に SpringContextUtil.getApplicationContext.getBean("name") はビーン "name"を取得することができます。

これを行うには、この SpringContextUtil の中に applications.xml の中に、例えば

<bean class="com.util.SpringContextUtil" />

ここではビーン SpringContextUtil はプロパティを含んでいません。 applicationContext . 私は、春ビーンが初期化されたときに、このプロパティが設定されていると思います。しかし、これはどのように行われるのですか?どのようにメソッド setApplicationContext はどのように呼び出されるのでしょうか?

どのように解決するのですか?

SpringがBeanをインスタンス化するとき、以下のようないくつかのインターフェイスを探します。 ApplicationContextAwareInitializingBean . これらが見つかると、メソッドが呼び出されます。例(非常に単純化したもの)

Class<?> beanClass = beanDefinition.getClass();
Object bean = beanClass.newInstance();
if (bean instanceof ApplicationContextAware) {
    ((ApplicationContextAware) bean).setApplicationContext(ctx);
}

新しいバージョンでは、spring特有のインターフェースを実装するよりも、アノテーションを使用した方が良い場合があることに注意してください。今は単純に

@Inject // or @Autowired
private ApplicationContext ctx;