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元数据。

BeanDefinition.png

AnnotatedBeanDefinition

注解元数据

AnnotationMetadata

MethodMetadata

  1. 使用反射api构建

  2. 使用asm操作字节码构建

访问者模式

使用asm解析类的元数据运用到访问者模式

设计意图

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

访问者模式.png

asm读取元数据


asm读取元数据.png

class文件格式详见java虚拟机规范第4章

上一篇 下一篇

猜你喜欢

热点阅读