我们平常开发写的@Compone将类加入到IOC容器中,主要针对的是业务类。如果想把第三方的jar包中的类加入到IOC容器中,应该怎么操作呢?
在@SpringBootApplication注解中有一个@EnableAutoConfiguration。这是导入第三方jar包的关键
在@EnableAutoConfiguration中,@import了一个select类。
在这个select类中加载了一个.factories的文件。这个文件配置了所有要导入IOC容器的类。如果第三方想把类加入到IOC容器中,那么jar包提供者应该提供一个.factories的文件,里面包含了所有要导入IOC容器的类。
如何自定义一个启动类来验证AutoConfiguration的机制?
1 | //@ComponentScan |
自定义的启动类如果加上@ComponentScan,会扫描与启动类同级目录和子目录下的bean,将其加入到IOC容器中。刚好这里Config配置类在扫描路径中,所以加上@ComponentScan可以启动服务器。
如果使用@Import来导入配置类,则会缺少很多@SpringBootApplication默认的配置。启动服务器会报错。第7行代码就是解决单独导入配置类引起的错误。
源码中@Import的是一个Select的类,我们也来实现一下。实现创建一个类实现ImportSelector接口。
方法的返回值是一个字符串数组,数组的元素就是需要导入的配置类的类名。这里可以使用class.getName()
1 | public class LOLSelector implements ImportSelector { |
接着启动类可以import我们编写好的Selector。但是源码中使用的是@EnabledAutoConfiguration,我们也来还原一下。
首先编写一个注解,导入Selector配置类。
1 | (RetentionPolicy.RUNTIME) |
接着在启动类就可以直接使用@EnabledAutoConfiguration了。
1 |
|