@Import 注解
主要是记录一些学习的东西,记性不好, 怕忘了,如果有错误的地方,欢迎大家指出,一起进步~
文章目录
1 什么是@Import
是Spring框架提供的一个注解,主要作用是将对象手动注入到 Spring 的 IOC 容器中进行管理,默认的bean的name是类的全限定名,即包含完整的包名。
2 怎么用
(1)直接将要注入到容器的类加到@Import注解中
先看一个简单的实例,如下 Person 类:
package com.example.demo.testimport;
/**
* @author Jason
* @version V1.0
*/
public class Person {
private String name;
private String age;
}
再写一个测试用的类,使用@Import注解来注入上面的 Person 类:
package com.example.demo.testimport;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;
/**
* @author Jason
* @version V1.0
*/
@Import({Person.class})
public class TestImport {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext
= new AnnotationConfigApplicationContext(TestImport.class);
// 获取已注入到容器中的Bean
String[] names = applicationContext.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
}
可以在控制台中看到:
testImport
com.example.demo.testimport.Person
说明 Person 类已经被注入进去了。
(2)将需要注册的类放到同一个类中再统一注入
与(1)不同,这次通过@Bean将Person类放到MyConfig.class中:
package com.example.demo.testimport;
import org.springframework.context.annotation.Bean;
/**
* @author Jason
* @version V1.0
* @Date 2019/7/3 20:54
*/
public class MyConfig {
@Bean
public Person person() {
return new Person();
}
}
然后再将MyConfig类用@Import手动注入到容器中:
package com.example.demo.testimport;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;
/**
* @author Jason
* @version V1.0
*/
@Import({MyConfig.class})
public class TestImport {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext
= new AnnotationConfigApplicationContext(TestImport.class);
// 获取已注册到容器中的Bean
String[] names = applicationContext.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
}
可以从控制台看到:
testImport
com.example.demo.testimport.MyConfig
person
3 两种方式的区别
从控制台输出的信息可以发现,直接用@Import引入的类它的beanName是它的包全路径+类名,而通过@Bean方式注入的话它的beanName是方法名。
4 与@Service、@Configuration和@Bean注解的区别
个人的理解,一个是注入的方式不同,@Service是直接就可以说明被标注的类需要纳入容器管理,而@Import还需要将类放到value中;还有一个是用途的区别,@Import 注解的最主要功能就是导入额外的配置信息,而@Service更多是用于业务层的标注,@Configuration和@Bean也经常用来导入一些额外配置,但是当配置一多写法就比较麻烦。
[1]: @Import注解——导入资源
[2]: Spring Boot 自动配置之@Enable* 与@Import注解