在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便。 我总结了三种引入第三方jar的Bean的方法。
1--注解装配Bean
使用@Component等注解,只要在类上加类上加 @Component 注解即可,该注解只要被扫描到就会注入到spring的bean容器中。还有如:@Repository、@Service、@Controller 等常用注解同样可以。
@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
在文件中添加对应类的全类名