整体结构
实体类
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());
}
}
运行结果