6

Spring コンテキスト xml ファイル内で構成されたプロパティ ファイルがあります。ファイルから値を正常にロードします。スプリング管理されていない通常の pojo で、そのプロパティ ファイルからプロパティをロードしようとしています。Spring はすでにそのプロパティをロードしているので、プロパティ ファイルを手動でロードする代わりに値を取得する方法があるかどうか疑問に思っていました。

4

2 に答える 2

7

pojo が Spring によって管理されていない場合は、静的な方法で Spring コンテキストにアクセスできます。

アプリケーション xml に Bean を追加します。

<bean id="StaticSpringApplicationContext" class="com.package.StaticSpringApplicationContext"/>

クラスを作成します。

public class StaticSpringApplicationContext implements ApplicationContextAware  {
    private static ApplicationContext CONTEXT;

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

      public static Object getBean(String beanName) {
        return CONTEXT.getBean(beanName);
      }

}

次に、以下を使用して POJO から任意の Spring Bean にアクセスできます。

StaticSpringApplicationContext.getBean("yourBean")
于 2012-11-29T19:21:06.437 に答える
1

アノテーションを使用してジェネリックを実装する、より現代的なアプローチの場合、このバージョンを使用して、Wickramarachi 応答に基づいて構築できます。

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class StaticSpringApplicationContext implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        StaticSpringApplicationContext.applicationContext = applicationContext;
    }

    public static <T> T getBean(Class<T> requiredType) {
        return applicationContext.getBean(requiredType);
    }

    public static <T> T getBean(String beanName, Class<T> requiredType) {
        return applicationContext.getBean(beanName, requiredType);
    }

}

使用方法は次のとおりです。

SpringJPAPersistenceChannel bean = StaticSpringApplicationContext.getBean(MyBean.class);
于 2018-08-07T10:34:53.063 に答える