2017-10-23 2 views
-1

私はSpringでJava構成を使用しています。 目的は、BeanFactoryPostProcessorのステージでbeanDefinionクラスを置き換えることです。SpringのJava構成とBeanFactoryPostProcessor

I'vは、Bean

@Bean 
public User user() { 
    CustomUser user = new CustomUser(); 
    user.setName("UserA"); 
    return user; 
} 

と新クラス "NewTypeOfCustomUser" を持って、NewTypeOfCutsomUserでCustomUserを交換したいと思います。

前に、男がXML設定をしているときにこれを行う例を見てきました。

BeanDefinition.setBeanClassName 

の方法で行います。しかし、BeanFactoryPostProcessorの作業の段階で私の場合のbeanDefinitionのクラスはnullです。 Java Configは、XML-configsとはまったく異なる方法で動作するようです。

私の質問:Java設定を使用してこの手順を実行することは可能ですか?

答えて

0

あなたの要件を理解している限り、でCustomUserのインスタンスのタイプを変更したいとします。 XML設定では、あなたが述べたように、これはBeanFactoryPostProcessorを使用して実現できます。 Javaの設定では、user() beanメソッドの実際のコードを変更して、それが実現可能だとは思わない。

BeanPostProcessorを使用すると、BeanFactoryPostProcessorという宣言ではなく、beansインスタンスで直接動作し、必要なbeanのインスタンスを変更できます。あなたは何ができるかの例に従うこと:

public class CustomUserBeanPostProcessor implements BeanPostProcessor { 

    public CustomUserBeanPostProcessor() { 
     System.out.println("CustomUserBeanPostProcessor constructor called"); 
    } 

    @Override 
    public Object postProcessBeforeInitialization(Object bean, String beanName) 
      throws BeansException { 
     System.out.println("postProcessBeforeInitialization method invoked"); 
     System.out.println(bean.getClass() + " " + beanName); 
     return bean; 
    } 

    @Override 
    public Object postProcessAfterInitialization(Object bean, String beanName) 
      throws BeansException { 
     System.out.println("postProcessAfterInitialization method invoked"); 
     System.out.println(bean.getClass() + " " + beanName); 
     if (bean instanceof User) { 
      bean = new NewTypeOfCustomUser((User) user); 
     } 
     return bean; 
    } 
} 

これはまた、あなたがCustomUserパラメータを受け入れ、自分のニーズに応じてデータを管理NewTypeOfCustomUserにコンストラクタを追加する必要があります。

+0

はい、私はそうすることができます。しかし、私の目的は、これを行う別の方法を見つけることではなく、学ぶことです。カスタム@DeprecatedCustom(newImplementation = NewImplementation.class)アノテーションを実装したいと思います。私のカスタムBeanFactoryPostProcessorがしなければならないことは、beanDefinitionのクラスがその注釈によって注釈付けされているかどうかをチェックし、そうであれば廃止されたbeanDefinitionクラス –

関連する問題