0
点赞
收藏
分享

微信扫一扫

Web前端—小兔鲜儿电商网站底部设计及网站中间过渡部分设计

静悠 2023-11-20 阅读 51
springjava

目录

引言

BeanFactoryPostProcessor

注意 

 BeanPostProcessor


引言

Spring主要有两种后处理器:

  • BeanFactoryPostProcessor:Bean工厂后处理器,BeanDefintionMap填充完毕,Bean实例化之前执行;

  • BeanPostProcessor:Bean后处理器,一般在Bean实例化之后,填充单例池singletonObjects之前执行

BeanFactoryPostProcessor

 完善Bean实例化图

package com.xfy.processor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;

public class MyBeanFactorypostprocessor implements BeanFactoryPostProcessor {
    public void postProcessBeanFactory(ConfigurableListableBeanFactory BeanFactory) throws BeansException {
        System.out.println("pPBF");
        //修改某个BeanDifinition的全限定名,将某个Bean的类型改变
        BeanDefinition userDao = BeanFactory.getBeanDefinition("userDao");
        userDao.setBeanClassName("com.xfy.service.impl.UserServiceImpl");
        //动态的去注册一个BeanDefinition
        BeanDefinition BeanDefinition = new RootBeanDefinition();
        BeanDefinition.setBeanClassName("com.xfy.dao.Impl.PersonDaoImpl");
        DefaultListableBeanFactory DBeanFactory= (DefaultListableBeanFactory) BeanFactory;
        DBeanFactory.registerBeanDefinition("personDao",BeanDefinition);

    }
}

<bean class="com.xfy.processor.MyBeanFactorypostprocessor"></bean>
注意 

Spring提供了一个BeanFactoryPostProcessor的子接口DBeanFactoryRegisterPostProcessor专门用于注册BeanDefintion操作    如下代码

package com.xfy.processor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;

public class MyBeanFactorypostRegistryprocessor implements BeanDefinitionRegistryPostProcessor {
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
        RootBeanDefinition beanDefinition = new RootBeanDefinition("com.xfy.dao.Impl.PersonDaoImpl");
        beanDefinitionRegistry.registerBeanDefinition("personDao",beanDefinition);

    }

    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {

    }
}

 BeanPostProcessor

完善Bean实例化流程图

代码实现对Bean的属性赋值如下:

package com.xfy.processor;

import com.xfy.anno.MyComponent;
import com.xfy.dao.Impl.UserDaoImpl;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
@MyComponent("mbpp")
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof UserDaoImpl){
            UserDaoImpl userDao= (UserDaoImpl) bean;
            userDao.setName("haohao");
        }
        System.out.println(beanName+"                         postProcessBeforeInitialization");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName+"                          postProcessAfterInitialization");
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }
}

举报

相关推荐

0 条评论