spring 学习 22 @Import注解的使用
Posted 阿瞒123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 学习 22 @Import注解的使用相关的知识,希望对你有一定的参考价值。
@Import注解的简介
@Import注解的作用:把类注册进spring IOC容器,采用的方式构造注入(默认构造器)
在spring 4.2以前,Import注解中的可以导入的类只有三种
一、被@Configuration注解标注的类
二、ImportBeanDefinitionRegistrar接口的实现类
三、ImportSelector接口的实现类
在spring 4.2之后,普通的java类也可以被@Import注解导入到Spring IOC容器,现在@Import注解可以导入任何的类了,具体做分类就可以分成具体四种
一、普通java类
二、被@Configuration注解标注的类
三、ImportBeanDefinitionRegistrar接口的实现类
四、ImportSelector接口的实现类
在这篇博客中,只介绍前两种。
一、普通java类
下面是普通的java类
package com.spring.learn.bean; import org.springframework.beans.factory.annotation.Value; import lombok.Data; @Data public class DataSource { @Value("${username}") private String user; @Value("${password}") private String password; @Value("${url}") private String url; public DataSource() { System.out.println("DataSource的默认初始化器"); } }
package com.spring.learn.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource; import com.spring.learn.bean.DataSource; @Configuration @Import(value= {DataSource.class})//导入DataSource @PropertySource("classpath:application.properties") public class ImportTestConfig { }
在Spring IOC容器中发现DataSource被注入了
package com.spring.learn.importMain; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import com.spring.learn.bean.DataSource; import com.spring.learn.config.ImportTestConfig; public class ImportAnnotationMain { public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext( ImportTestConfig.class); String[] definitionNames = applicationContext2.getBeanDefinitionNames(); for (String name : definitionNames) { System.out.println(name); } DataSource dataSource=applicationContext2.getBean(DataSource.class); System.out.println(dataSource); } }
运行结果
二、@Configuration注解标注的类
如果@Import类中的是被@Configuration注解标注的类(配置类),配置类会被注入到Spring IOC容器中的,同时配置类中的配置信息也会被加入到Spring容器中
下面配置类的信息:这个配置类会扫描com.zhang包及其子包
package com.spring.learn.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.zhang") public class ScanConfig3 { }
导入@Configuration类
package com.spring.learn.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import(value= {ScanConfig3.class})//导入配置类 public class ImportTestConfig { }
运行测试
package com.spring.learn.importMain; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import com.spring.learn.config.ImportTestConfig; public class ImportAnnotationMain { public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext( ImportTestConfig.class); String[] definitionNames = applicationContext2.getBeanDefinitionNames(); for (String name : definitionNames) { System.out.println(name); } } }
运行结果
userController、userDao、userService这三个bean就是在ScanConfig3配置类中的要扫描的包下的类注入的
以上是关于spring 学习 22 @Import注解的使用的主要内容,如果未能解决你的问题,请参考以下文章