SpringBoot 高级 原理分析 -- @Import注解
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 高级 原理分析 -- @Import注解相关的知识,希望对你有一定的参考价值。
01: SpringBoot 高级 原理分析 – SpringBoot 自动配置:Condition
02: SpringBoot 高级 原理分析 – 切换内置web服务器
03: SpringBoot 高级 原理分析 – @Enable*注解、@Import注解
04: SpringBoot 高级 原理分析 – @Import注解
05: SpringBoot 高级 原理分析 – @EnableAutoConfiguration 注解
06: SpringBoot 高级 原理分析 – 自定义redis-starter
1. @Import注解
@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中。而@Import提供4中用法:
- ① 导入Bean(直接导入相关的Bean)
- ② 导入配置类(会把配置类里面所有定义的Bean都注入到IOC容器里面)
- ③ 导入 ImportSelector 实现类。一般用于加载配置文件中的类
- ④ 导入 ImportBeanDefinitionRegistrar 实现类。
说明:本节案例承接上节案例
1.1 导入Bean(直接导入相关的Bean)
1.2 导入配置类
准备工作:
- 新增一个Role类
package com.tian.pojo;
public class Role
- 配置UserConfig
package com.tian.config;
import com.tian.pojo.Role;
import com.tian.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfig
@Bean
public User user()
return new User();
@Bean
public Role role()
return new Role();
开始测试:
1.3 导入 ImportSelector 实现类
package com.tian.config;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelector implements ImportSelector
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata)
// 这个里面对应实体类的全限定类名
// 使用这种方式的好处是可以灵活配置(可以在配置文件当中获取文件的全限定类名)
return new String[]"com.tian.pojo.Role", "com.tian.pojo.User";
开始测试:
1.4 导入 ImportBeanDefinitionRegistrar 实现类
package com.tian.config;
import com.tian.pojo.Role;
import com.tian.pojo.User;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
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 MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)
AbstractBeanDefinition beanDefinition01 = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
AbstractBeanDefinition beanDefinition02 = BeanDefinitionBuilder.rootBeanDefinition(Role.class).getBeanDefinition();
registry.registerBeanDefinition("user", beanDefinition01);
registry.registerBeanDefinition("role", beanDefinition02);
运行结果:
以上是关于SpringBoot 高级 原理分析 -- @Import注解的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot 高级 原理分析 -- @Enable*注解@Import注解
SpringBoot 高级 原理分析 -- 自定义redis-starter
SpringBoot 高级 原理分析 -- SpringBoot启动流程分析