关于 @Import 注解

@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注解

发布了14 篇原创文章 · 获赞 0 · 访问量 749

猜你喜欢

转载自blog.csdn.net/JasonWeng/article/details/94590168