BeanFactoryPostProcessor后置处理器

在springboot出现之前,spring一般都是通过读取我们编写的xml文件来创建Bean的,在<Bean>标签中我们需要定义Bean的类型以及属性等有关于描述Bean的信息,BeanFactory就是通过这些信息来定义一个Bean的,在Bean初始化的过程中,Bean的属性都会被赋予对应类型的默认值,比如,String类型属性默认值就是null,一般引用类型的默认值都是null。那有没有办法不让Bean的某个属性不去默认值而取我们自定义的值呢?答案是BeanFactoryPostProcessor后置处理器,该处理器的作用是在Bean初始化之前也就是调用构造方法之前给对应的属性赋值。这样就可以在Bean初始化调用构造方法时传递我们赋值。测试用例如下:

@Component
public class Student {
    private String name;
    private Integer age;
    private String phone;

    public Student() {
        System.out.println("无参构造初始化");
    }

    public Student(String name, Integer age, String phone) {
        System.out.println("全参构造初始化");
        this.name = name;
        this.age = age;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}
@Component
public class CustomeBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        System.out.println("CustomeBeanFactoryPostProcessor开始改变默认值");
        BeanDefinition beanDefinition = configurableListableBeanFactory.getBeanDefinition("student");
        beanDefinition.getPropertyValues().add("name","I'm an cool boy");
        System.out.println("CustomeBeanFactoryPostProcessor结束改变默认值");
    }
}
@RestController
public class StudentController {

    @Autowired
    private Student student;

    @GetMapping("/get")
    public Student getStudent(){
        return student;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值