Maison > Java > javaDidacticiel > le corps du texte

Point d'extension du conteneur Spring : post-processeur Bean

php是最好的语言
Libérer: 2018-08-10 15:07:11
original
2459 Les gens l'ont consulté

BeanPostProcessor (post-processeur Bean) est souvent utilisé pour modifier les valeurs internes des beans ; implémenter un proxy dynamique des beans, etc.

BeanFactoryPostProcessor et BeanPostProcessor sont tous deux des points d'extension exposés lorsque Spring initialise les beans. Mais quelle est la différence ?
Comme le montre l'image dans « Comprendre le cycle de vie d'un bean » : BeanFactoryPostProcessor est le premier appelé dans le cycle de vie, bien avant BeanPostProcessor. Il est exécuté après que le conteneur Spring ait chargé le fichier de définition du bean et avant l'instanciation du bean. En d'autres termes, Spring permet à BeanFactoryPostProcessor de lire et de modifier les métadonnées de configuration du bean avant que le conteneur ne crée le bean. Par exemple, ajoutez les propriétés et les valeurs du bean, réinitialisez si le bean est candidat au câblage automatique, réinitialisez les dépendances du bean, etc.

Plusieurs BeanFactoryPostProcessors peuvent être configurés dans le fichier de configuration srping en même temps, et l'ordre d'exécution de chaque BeanFactoryPostProcessor peut être contrôlé en définissant l'attribut 'order' lors de l'enregistrement en XML. L'interface

BeanFactoryPostProcessor est définie comme suit :

public interface BeanFactoryPostProcessor {
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
Copier après la connexion

L'interface n'a qu'une seule méthode postProcessBeanFactory. Le paramètre de cette méthode est de type ConfigurableListableBeanFactory. Dans le développement réel, nous utilisons souvent sa méthode getBeanDefinition() pour obtenir la définition des métadonnées d'un certain bean : BeanDefinition. Il a ces méthodes :
Point dextension du conteneur Spring : post-processeur Bean

Regardez un exemple :
Un bean est défini dans le fichier de configuration :

<bean id="messi" class="twm.spring.LifecycleTest.footballPlayer">
    <property name="name" value="Messi"></property>
    <property name="team" value="Barcelona"></property>
</bean>
Copier après la connexion

Créez la classe beanFactoryPostProcessorImpl et implémentez le interface 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);
    }
}
Copier après la connexion

Classe appelante :

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());
}
Copier après la connexion

Sortie :

PropertyValues : length=2 ; propriété du bean 'nom' ; team'
Agenyan

La classe PropertyPlaceholderConfigurer mentionnée dans « PropertyPlaceholderConfigurer Application » est une implémentation de l'interface BeanFactoryPostProcessor. Il remplacera les espaces réservés dans la définition de classe (tels que ${jdbc.url}) par le contenu correspondant du fichier de propriétés avant que le conteneur ne crée le bean.

Recommandations associées :

Introduction aux méthodes de l'interface d'extension Spring Bean

Interface ResourceLoaderAware - [Spring Chinese Manual]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal