SpringBoot引入第三方jar的Bean的三种方式

SpringBoot引入第三方jar的Bean的三种方式

在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便。 我总结了三种引入第三方jar的Bean的方法。

1--注解装配Bean

  1. 使用@Component等注解,只要在类上加类上加 @Component 注解即可,该注解只要被扫描到就会注入到spring的bean容器中。还有如:@Repository、@Service、@Controller 等常用注解同样可以。

  2. @Bean定义方式,这种方式,主要是结合Configuration来定义bean,首先是声明一个配置类,而后再配置类中,经过返回bean对象的方法形式来声明bean。

@Data public class ConfigDemoBean { }

@Configuration public class BeanLoadConfig { @Bean public ConfigDemoBean configDemoBean() { return new ConfigDemoBean(); } }

就像这样。顺便在这里呢,@Component与@Bean的区别:

(1)作用对象不同:@Component 注解作用于类,而 @Bean 注解作用于方法。

(2)@Component通常是通过类路径扫描来自动装配到Spring容器中。而@Bean通常我们会在该注解的方法中定义产生这个bean的逻辑。我们可以加一些@Conditional,@ConditionalOnBean等等一些注解来控制是否声明该Bean,不会一开始就自动装配到Spring容器中。这个在后面也会用到。


2--引入外部jar包的Bean

@SpringBootApplication注解会默认去扫描的本包和它的子包的所有需要装配的类,自动装配到spring的bean容器中。

但是如果你提供了一个Jar包供第三方用户使用,那么你这个jar包中的Bean,能被第三方加载么?

这就要看你当前项目的包名和你你引用的第三方Jar包的包名了。如果你当前项目本包的地址是com.hello1 而你引用的第三方Jar的本包是 com.hello2,那么也就是第三方Jar的Bean无法被扫描到,所以也就无法注入到Spring容器中。那么如何解决这个问题呢?

1、@ComponentScan

@SpringBootApplication注解默认扫描只是当前项目的本包和它的子包,那就想办法让它扫描第三方jar的包就好了。

2、@Import注解

@ComponentScan是扫描整个包,但其实你可能只需注入一个或者几个指定的Bean,那我们可以考虑@Import 注解

3、spring.factories

这种方式也是我最推荐的方式,什么都不用做,就可以引入第三方的jar包。

我们只需要在将配置放在第三方jar指定的文件中即可,使用者会自动加载,从而避免的代码的侵入

  • 在资源目录下新建目录 META-INF

  • 在 META-INF 目录下新建文件 spring.factories

  • 在文件中添加对应类的全类名