SpringBoot原理篇:bean的多种加载方法之 实现ImportBeanDefinitionRegistrar注册bean

 实现ImportBeanDefinitionRegistrar

package com.qing.config;

import com.qing.bean.Cat;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

public class MyDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
        //metadata 元数据的用法同动态加载bean
        BeanDefinition beanDefinition= BeanDefinitionBuilder.
                rootBeanDefinition(Cat.class).
                getBeanDefinition();
        //beanDefinition可以设置单例啥的
        registry.registerBeanDefinition("cat",beanDefinition);
    }
}

 动态加载bean的方式点这里

元数据metadata 是下面的config7

package com.qing.config;


import org.springframework.context.annotation.Import;


@Import(MyDefinitionRegistrar.class)
public class SpringConfig7 {

}

 测试

package com.qing.app;

import com.qing.config.SpringConfig7;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App7 {
    public static void main(String[] args) {

        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig7.class);
        String[] names = ctx.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println("bean的名字:" + name);
        }

    }
}

 结果

 总结

猜你喜欢

转载自blog.csdn.net/m0_45877477/article/details/125665690