Spring注解驱动第六讲--@Import注解

摘要:
在上一篇博客中,我介绍了容器自动组装Bean的两种方法:1.使用@Bean注释组装Bean;2.使用@ComponentScan扫描包。您可以通过使用@Controller、@Service、@Repository和@Component注释扫描类来加载bean。另一种方法是使用@Import注释引用第三方类。用法:1.将@Import注释直接添加到主配置类,可以首先创建要在注释值赋值中创建的类型

在以前的博客中介绍了两种让容器自动装配bean的方法:

1,使用@Bean注解进行装配

2,使用@ComponentScan进行包扫描,扫描带有@Controller,@Service,@Repository,@Component注解的类即可装载bean

还有一种方式,使用@Import注解进行对引用第三方类时使用

用法:

一,直接在主配置类上添加@Import注解,注解的值赋值上要创建的类型即可

首先创建一个要加载进来的外部类

public classColor {
    ...
}

可以看到此类没有添加任何可以让包扫描到的注解,在容器创建是也不会加载到容器中

然后在主配置类上添加@Import注解

@Configuration
@Import({Color.class})//注解里面的值为需要IOC加载的类的类型
public classMainConfig2 {

}

测试类和返回结果:

public classIOCTest {
    @Test
    public voidtest4() {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig2.class);
        String[] names = applicationContext.getBeanDefinitionNames();//返回容器中所有bean的名字
        for(String name : names) {
            System.out.println(name);
        }
    }
}

运行结果:

mainConfig2
com.wxj.bean.Color

观察可得,使用@Import导入的组件在ioc容器中默认的id为全类名

二,实现ImportSelector接口方式

1,创建一个一个方法来实现ImportSelector接口()

public class MyImportSelector implementsImportSelector {
    /*** AnnotationMetadata类中可以获得注解名字,等注解信息
     * 
     * 返回的String数组为要让@Import注解加载的类的全类名
     */
    publicString[] selectImports(AnnotationMetadata importingClassMetadata) {
        
        return new String[] {"com.wxj.bean.Color"};//需要ioc容器管理的全类名,多个类可以由,分隔
}

}

2,更改主配置类的@Import注解中的value值

@Configuration
@Import({MyImportSelector.class})
public classMainConfig2 {
  
}

3,再次运行

mainConfig2
com.wxj.bean.Color

三,实现ImportBeanDefinitionRegistrar接口(手工的自定义bean)

1,实现ImportBeanDefinitionRegistrar,代码如下:

public class MyImportBeanDefinitionRegistrar implementsImportBeanDefinitionRegistrar {
    /*** importingClassMetadata:当前类的直接信息
     * registry:bean定义的注册类,通过使用它来为容器中注册bean
     *         把所有需要加到容器中的bean通过手工注册,调用BeanDefinitionRegistry的registerBeanDefinition方法进行手工注册
     *         
     */
    public voidregisterBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        //指定bean的定义信息...
        RootBeanDefinition beanDefinition = new RootBeanDefinition(Color.class);
        //给容器中的bean自定义id
        registry.registerBeanDefinition("Color", beanDefinition);
    }

}

2,更改主配置类

@Configuration
@Import({MyImportBeanDefinitionRegistrar.class})
public classMainConfig2 {
}

3,运行结果

mainConfig2
Color

注:在以后阅读SpringBoot源码时,第二种方法应用的极为广泛

免责声明:文章转载自《Spring注解驱动第六讲--@Import注解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#多线程(一)Web Service学习之六:CXF解决无法处理的数据类型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

spring+springmvc+mybatis xml配置文件

一、jdbc.properties 文件: driver=com.mysql.jdbc.Driverurl=jdbc:mysql://192.168.31.xxx:3306/abc?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername=xxxpassword=xxx#定义初...

SpringMVC2

1       SpringMVC架构 1.1     Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来: 1.2     Web MVC mvc设计模式在b/s系统下应用: 1、  用户发起request请求至控制器(Contro...

Spring源码阅读-IoC容器解析

目录 Spring IoC容器 ApplicationContext设计解析 BeanFactory ListableBeanFactory HierarchicalBeanFactory MessageSource ApplicationEventPublisher EnvironmentCapable ResourceLoader和Resour...

基于kuboard管理k8s

前言 昨天我们分享了本地springboot项目构建docker镜像的内容,详细介绍了springboot项目打包、镜像构建、基于docker启动运行的全过程,这个技术虽然不是特别难,但是很实用,因为镜像构建完成后,我们不仅可以让我们的服务在docker中运行,也可以让它在k8s中运行,今天我们就来看下如何通过kuboard在k8s上部署我们的服务。 今天...

MultipartFile(文件的上传)--CommonsMultipartResolver

一 : applicationContext.xml中:必须声明不然获取不到 <!-- 上传文件的配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">...

第一课:docker基本知识

1.什么是docker 使用最广泛的开源容器引擎 一种操作系统级的虚拟化技术 依赖于linux内核特性:namespace和cgroups 一种简单的应用程序打包工具 2.docker的设计目标 提供简单的应用程序打包工具 开发人员和运维人员职责逻辑分离 多环境保持一致性 3.docker的基本组成 docker client 客户端 docker d...