Bean的BeanFactoryPostProcessor、BeanPostProcessor,JavaConfig方式

整体结构

实体类

package com.xwctest.bean;

public class Order {
    private Integer id;
    private Double money;

    public Order(Integer id, Double money) {
        this.id = id;
        this.money = money;
        System.out.println("创建order有参构造");
    }

    public Order() {
        System.out.println("创建order无参构造");
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }
}
package com.xwctest.bean;

public class User {
    private String name;
    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
        System.out.println("创建user有参构造");
    }

    public User() {
        System.out.println("创建user无参构造");
    }

    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;
    }
}

配置类

@Configuration是标记为配置类,告诉容器这个类下有@Bean
@ComponentScan(basePackages = "com.xwctest")这里加上扫描的路径,在加载这个配置类的时候,顺带会把这个路径下的配置了@Component、、、有这些注解的类托管给容器。 此处就是(MyBeanFactoryPostProcessor、MyBeanPostProcessor)这两个标注了@Component的类会被扫描到。如果不加@ComponentScan。容器只有user、order两个bean。
@Configuration
@ComponentScan(basePackages = "com.xwctest")
public class JavaConfig {
    @Bean(name = "user")
    public User setUser(){
        return new User("xwc",26);
    }
    @Bean(name = "order")
    public Order setOrder(){
        return new Order(1111,12.58);
    }
}

后置处理器

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("MyBeanFactoryPostProcessor类的postProcessBeanFactory中");
        BeanDefinition bd = beanFactory.getBeanDefinition("user");
        MutablePropertyValues pv = bd.getPropertyValues();
      
    }
}





@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName+"初始化之前,postProcessBeforeInitialization中");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName+"初始化之后,postProcessBeforeInitialization中");
        return bean;
    }
}

主程序

public class MainClass {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
        User user =(User) context.getBean("user");
        System.out.println("user的name"+user.getName());
        System.out.println("user的Age"+user.getAge());
    }
}

运行结果

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值