SpringBoot自动注入原理初解与实现

前言:一直对SpringBoot的自动注入感兴趣,特意查了一下并进行了实现.

参考:https://blog.csdn.net/zxc123e/article/details/80222967(绝大部分是照抄了此博文,某些地方进行了改动)

https://www.cnblogs.com/duanxz/p/4520571.html

https://blog.csdn.net/gottst0113/article/details/80978966

https://www.cnblogs.com/duanxz/p/7493276.html

 

目录

第一章 实现自动装配的注解

第二章 EnableAutoConfiguration讲解

2.1 SpringFactoriesLoader

第三章 实例

3.1 自动配置类

3.1.1 pom.xml的配置

3.1.2 项目目录结构如下

3.1.3 Hello.java

3.1.4 HelloProperties.java

3.1.5 HelloAutoConfiguration.java

3.1.6 spring.factories

3.1.7 项目打包

3.2 应用类

3.2.1 pom.xml

3.2.2 主类

3.2.3 application.properties配置

3.3 进行测试 


第一章 实现自动装配的注解

首先Spring Boot项目中都会如下启动类:

@SpringBootApplication
public class TestAutoConfigApplication {

	public static void main(String[] args) {
		SpringApplication.run(TestAutoConfigApplication.class, args);
	}

}

 从上面代码可以看出,注解@SpringBootApplicationSpringApplication.run()方法是最为重要的部分。这里主要来看看@SpringBootApplication注解部分。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
    ...
}

虽然定义使用了多个Annotation进行了原信息标注,但实际上重要的只有三个Annotation:

@Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration,相当于把该类作为spring的xml配置文件中的<beans>
@EnableAutoConfiguration(实现自动装配的注解)
@ComponentScan(将标识了需要装配的类自动装配到spring的bean容器中)

如果在启动类使用这个三个注解,整个SpringBoot应用依然可以与之前的启动类功能一样。但每次写这3个比较啰嗦,所以写一个@SpringBootApplication方便点。

 

第二章 EnableAutoConfiguration讲解

既然我们要讲自动装配,是要把EnableAutoConfiguration说一下.

打开其源代码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
//@Import注解是为了把某个类注入到IOC容器中,这样就可以进行自动装配啥的,也可以通过getBean获取.
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
    ...
}

可以看到其将AutoConfigurationImportSelector.class导入了容器,借助AutoConfigurationImportSelector@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器(注意是Configuration配置)。

打开AutoConfigurationImportSelector的源码,可以看到通过 SpringFactoriesLoader.loadFactoryNames()
把 XXX.jar/META-INF/spring.factories中每一个xxxAutoConfiguration文件都加载到容器中.

protected List<String> getCandidat
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值