4. Bean配置元数据
2023-09-22 本文已影响0人
wyh001
在Spring中管理bean,使用bean的配置元数据,这些数据包括bean的名称、类名、依赖其他bean的名称、是否延迟初始化、作用域、生命周期回调方法、javabeans属性值列表、是否具有协作能力等。
这些配置信息可以通过xml文件、java注解和java代码的方式来进行配置,甚至也可以通过数据库进行存储。容器启动时,最终将这些信息解析成BeanDefinition
对象来表示。
示例:
xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="t5Service" class="org.example.service.s3.T5Service" init-method="destroyXml"
destroy-method="destroyXml">
<constructor-arg name="data" value="test1"/>
</bean>
<bean name="t4Service" class="org.example.service.T4Service"/>
</beans>
java注解配置
@Lazy
@Component
public class S4Service1 {
@Autowired
private T5Service t5Service;
@Qualifier("t5")
@Autowired
private T5Service t5Service2;
@Value("${name}")
private String data;
@PostConstruct
public void init() {
}
@PreDestroy
public void destroy() {
}
}
java代码配置
@Configuration
public class S4Configuration {
@Bean
public T5Service s4Service1(){
final T5Service t5Service = new T5Service();
t5Service.setData("test");
return t5Service;
}
}
BeanDefinition
BeanDefinition描述了一个bean实例,它具有属性值、构造函数参数值以及具体实现提供的更多信息。这只是一个最小的接口:主要目的是允许BeanFactoryPostProcessor
内省和修改属性值和其他bean元数据。
AnnotatedBeanDefinition
注解元数据
AnnotationMetadata
MethodMetadata
-
使用反射api构建
-
使用asm操作字节码构建
访问者模式
使用asm解析类的元数据运用到访问者模式
设计意图
访问者模式.png表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
asm读取元数据
asm读取元数据.png
class文件格式详见java虚拟机规范第4章