一、为什么使用 @Import 注解 ?
- 因为在没有使用
@Import
注解的时候,我们是通过@Bean
注解来注入第三方 Jar包, 这样就会产生代码的冗余问题。为了解决这一问题,@Import
注解帮助我们解决了注入第三方 Jar包,产生代码冗余的问题。
二、@Import 实例
1. 创建一个 Win10.java 类。
java
package org.example.spring5.domain;
/**
* @author: Calvin <br>
* @date: 2020/11/25 17:26 <br>
* @since: 1.0 <br>
* @description: Win10 <br>
*/
public class Win10 {
}
2. 在 SpringConfiguration 类, 添加@Import
- 作用:主要将外包的 jar包注入到 Spring 容器中。
java
package org.example.spring5.config;
import org.example.spring5.condition.OsCondition;
import org.example.spring5.domain.User;
import org.example.spring5.domain.Win10;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* @author: Calvin <br>
* @date: 2020/11/25 14:18 <br>
* @since: 1.0 <br>
* @description: SpringConfig <br>
*/
@Configuration
@Import(value = Win10.class) // @Import 作用:主要将外包的 jar 包注入到 Spring 容器中。
@ComponentScan(value = "org.example.spring5")
public class SpringConfiguration {
}
3. 启动程序
java
package org.example.spring5;
import org.example.spring5.config.SpringConfiguration;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @author: Calvin <br>
* @date: 2020/11/25 14:27 <br>
* @since: 1.0 <br>
* @description: SpringApplication <br>
*/
public class SpringApplication {
private static AnnotationConfigApplicationContext annotationConfigApplicationContext;
public static void main(String[] args) {
annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
System.out.println("Bean 对象已装配完毕...");
// 使用@Import 注入的Bean 对象,需要使用对象包的全部路径。
Win10 win10Bean = (Win10) annotationConfigApplicationContext.getBean("org.example.spring5.domain.Win10");
System.out.println(win10Bean);
}
}
4. 测试结果
log
Bean 对象已装配完毕...
org.example.spring5.domain.Win10@16610890
三、@Bean 和 @Import 区别
相同之处:
- 都是为了注入第三方Jar包需要调用的对象。
不同之处:
@Bean 需要通过将new对象出来。这种方式适合一个对象注入。
java@Bean @Conditional(value = OsCondition.class) public Win10 win10(){ return new Win10(); }
@Bean 调用过程只需要
对象.class
就可以了。javaWin10 win10Bean = annotationConfigApplicationContext.getBean(Win10.class);
@Import 需要将对象.class 导入进入。 这种方式适合多个对象注入,解决了@Bean 的冗余问题。
java@Configuration @Import(value = Win10.class) // @Import 作用:主要将外包的jar 包注入到 Spring 容器中。 @ComponentScan(value = "org.example.spring5") public class SpringConfiguration { }
@Import 调用过程需要
包.对象的全路径。
javaWin10 win10Bean = (Win10) annotationConfigApplicationContext.getBean("org.example.spring5.domain.Win10");