Spring Awareインターフェースを実現し、beanをカスタマイズして取得する2つの方法


スプリングを使ってプログラミングする時、beanの名前によって相応のbeanオブジェクトを獲得したいと思うことがよくあります。この時、BenFactoryAwareを実現することによって、需要を満たすことができます。コードは簡単です。

@Servicepublic class BeanFactoryHelper implements BeanFactoryAware {
  private static BeanFactory beanFactory;
  @Override
  public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
    this.beanFactory = beanFactory;
  }
  public static Object getBean(String beanName){
     if(beanFactory == null){
      throw new NullPointerException("BeanFactory is null!");
    }
     return beanFactory.getBean(beanName);   } }
もう一つの方法はApplication Contect Awareインターフェースを実現することです。コードも簡単です。

@Service
public class ApplicationContextHelper implements ApplicationContextAware {
  private static ApplicationContext applicationContext;
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }
  public static Object getBean(String beanName){
    if(applicationContext == null){
      throw new NullPointerException("ApplicationContext is null!");
    }
    return applicationContext.getBean(beanName);
  }
}
上記の2つの方法は、コンテナ起動時のみ、BenFactoryとAppliation Contectをカスタムhelperクラスに注入します。ローカルjunnitテスト時に、beanの名前に基づいてbeanオブジェクトを取得する必要があれば、Class PathXml Application Contextを通じてアプリを取得します。コードは以下の通りです。

@Test
  public void test() throws SQLException {
    //   classpath   spring-mybatis.xml  bean   
    ApplicationContext context = new ClassPathXmlApplicationContext("spring-mybatis.xml");
    IUserService userService = (IUserService) context.getBean("userService");
    User user = new User();
    user.setName("test");
    user.setAge(20);
    userService.addUser(user);
  }
締め括りをつける
以上は小编が皆さんに分かち合うJavaプログラミングを実现しました。Awareインターフェースは自分でbeanの二つの方式の全部の内容を取得しました。何か問題があったら、メッセージを残してください。皆さん、当駅を応援してくれてありがとうございます。