重看Spring聚焦BeanDefinition分析和构造
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
// 定义配置类
@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
public class MyBean {
// 构造函数
public MyBean() {
System.out.println("MyBean 被实例化");
}
}
// 使用ApplicationContext分析BeanDefinition
public class BeanDefinitionAnalysis {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
BeanDefinition beanDefinition = context.getBeanFactory().getBeanDefinition("myBean");
// 输出BeanDefinition的信息
System.out.println("BeanDefinition 的类型: " + beanDefinition.getClass().getName());
System.out.println("BeanDefinition 的作用域: " + beanDefinition.getScope());
System.out.println("BeanDefinition 的 laziness: " + beanDefinition.isLazyInit());
System.out.println("BeanDefinition 的构造方法: " + beanDefinition.getConstructorArgumentValues());
context.close();
}
}
这段代码首先定义了一个简单的配置类MyConfiguration
,其中包含一个名为myBean
的Bean定义。然后定义了一个简单的Bean类MyBean
,在其构造函数中打印了一条消息。最后,在BeanDefinitionAnalysis
类的main
方法中,我们创建了一个AnnotationConfigApplicationContext
,用于加载我们的配置类,并获取了myBean
的BeanDefinition
。接着,我们打印了BeanDefinition
的一些信息,如类型、作用域、是否懒加载以及构造参数值。这样做可以帮助开发者理解Spring容器是如何处理Bean定义和构造Bean实例的。
评论已关闭