Heim  >  Artikel  >  Java  >  Spring-Container-Erweiterungspunkt: Bean-Postprozessor

Spring-Container-Erweiterungspunkt: Bean-Postprozessor

php是最好的语言
php是最好的语言Original
2018-08-10 15:07:112450Durchsuche

BeanPostProcessor (Bean-Postprozessor) wird häufig verwendet, um die internen Werte von Beans zu ändern.

BeanFactoryPostProcessor und BeanPostProcessor sind Erweiterungspunkte, die verfügbar gemacht werden, wenn Spring Beans initialisiert. Aber was ist der Unterschied?
Wie aus dem Bild in „Bean-Lebenszyklus verstehen“ ersichtlich ist, wird BeanFactoryPostProcessor am frühesten im Lebenszyklus aufgerufen, viel früher als BeanPostProcessor. Es wird ausgeführt, nachdem der Spring-Container die Bean-Definitionsdatei geladen hat und bevor die Bean instanziiert wird. Mit anderen Worten: Spring ermöglicht es BeanFactoryPostProcessor, Metadaten der Bean-Konfiguration zu lesen und zu ändern, bevor der Container die Bean erstellt. Fügen Sie beispielsweise die Eigenschaften und Werte der Bean hinzu, setzen Sie zurück, ob die Bean ein Kandidat für die automatische Verdrahtung ist, setzen Sie die Abhängigkeiten der Bean zurück usw.

In der Srping-Konfigurationsdatei können mehrere BeanFactoryPostProcessors gleichzeitig konfiguriert werden, und die Ausführungsreihenfolge jedes BeanFactoryPostProcessors kann durch Festlegen des Attributs „order“ bei der Registrierung in XML gesteuert werden. Die

BeanFactoryPostProcessor-Schnittstelle ist wie folgt definiert:

public interface BeanFactoryPostProcessor {
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

Die Schnittstelle hat nur eine Methode postProcessBeanFactory. Der Parameter dieser Methode ist vom Typ ConfigurableListableBeanFactory. In der tatsächlichen Entwicklung verwenden wir häufig die Methode getBeanDefinition(), um die Metadatendefinition einer bestimmten Bean abzurufen: BeanDefinition. Es verfügt über diese Methoden:
Spring-Container-Erweiterungspunkt: Bean-Postprozessor

Sehen Sie sich ein Beispiel an:
Eine Bean ist in der Konfigurationsdatei definiert:

<bean id="messi" class="twm.spring.LifecycleTest.footballPlayer">
    <property name="name" value="Messi"></property>
    <property name="team" value="Barcelona"></property>
</bean>

Erstellen Sie die Klasse beanFactoryPostProcessorImpl und implementieren Sie die Schnittstelle BeanFactoryPostProcessor :

public class beanFactoryPostProcessorImpl implements BeanFactoryPostProcessor{

    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("beanFactoryPostProcessorImpl");
        BeanDefinition bdefine=beanFactory.getBeanDefinition("messi");
        System.out.println(bdefine.getPropertyValues().toString());
        MutablePropertyValues pv =  bdefine.getPropertyValues();  
            if (pv.contains("team")) {
                PropertyValue ppv= pv.getPropertyValue("name");
                TypedStringValue obj=(TypedStringValue)ppv.getValue();
                if(obj.getValue().equals("Messi")){
                    pv.addPropertyValue("team", "阿根延");  
                }
        }  
            bdefine.setScope(BeanDefinition.SCOPE_PROTOTYPE);
    }
}

Aufrufende Klasse:

public static void main(String[] args) throws Exception {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
    footballPlayer obj = ctx.getBean("messi",footballPlayer.class);
    System.out.println(obj.getTeam());
}

Ausgabe:

PropertyValues: length=2; Bean-Eigenschaft 'team'
Agenyan

Die in „PropertyPlaceholderConfigurer-Anwendung“ erwähnte PropertyPlaceholderConfigurer-Klasse ist eine Implementierung der BeanFactoryPostProcessor-Schnittstelle. Es ersetzt die Platzhalter in der Klassendefinition (z. B. ${jdbc.url}) durch den entsprechenden Inhalt der Eigenschaftendatei, bevor der Container die Bean erstellt.

Verwandte Empfehlungen:

Einführung in die Methoden der Spring Bean-Erweiterungsschnittstelle

ResourceLoaderAware-Schnittstelle – [Spring Chinese Manual]

Das obige ist der detaillierte Inhalt vonSpring-Container-Erweiterungspunkt: Bean-Postprozessor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn