黑马springboot_p23_springboot自动配置_@Import详解

@Import注解在SpringBoot中起到关键作用,它能将指定的类加入到IOC容器中。本文详细介绍了@Import的四种用法:导入Bean、导入配置类、通过ImportSelector加载配置文件中的类以及利用ImportBeanDefinitionRegistrar实现更细粒度的控制。通过这些方法,开发者可以灵活地定制SpringBoot的自动配置过程。
摘要由CSDN通过智能技术生成

@Import注解

@Enable底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中,而@Import提供4种用法:

1.导入Bean

        @Import(User.class)

        获取user的代码:

        User user = context.getBean(User.class);

        sout(user)

        Map<String,User> map = context.getBeansOfType(User.class);

        sout(map);

2.导入配置类

        @Import(UserConfig.class)

        User user = context.getBean(User.class);

3.导入ImportSelector实现类,一般用于加载配置文件中的类

        在..other工程下的com.itheima.config包下新建一个类:

        

package com.itheima.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.itheima.domain.User", "com.itheima.domain.Role"};
    }
}

在原工程下使用该注解:

@Import(MyImportSelector.class)
public class SpringEnableApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringEnableApplication.class, args);
        //获取Bean
        Object user = context.getBean(User.class);
        System.out.println(user);
    }
}

4.导入ImportBeanDefinitionRegistrar实现类

package com.itheima.config;

import com.itheima.domain.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 beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
        registry.registerBeanDefinition("user", beanDefinition);
    }
}
@Import({MyImportBeanDefinitionRegistrar.class})
public class SpringEnableApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringEnableApplication.class, args);
        //获取Bean
        //Object user = context.getBean(User.class);
        //System.out.println(user);
        Object user = context.getBean("user");
        System.out.println(user);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值