当面试被问:请你说说你对Spring Boot自动装配与条件装配的理解

我的回答是

springboot的自动装配就是比如当我们在用redisTemplate这个对象的时候,我们明明没有手动的把这个bean注册spring容器中,但是我们却可以从spring容器中拿到这个对象,这就是在我们加入了redis-stater依赖的时候,springBoot帮我们实现了自动装配。

自动装配的实现其实就是一种约定优于配置的思想,在我们springBoot的启动类上有@SpringBootApplication注解,它其实是有三个 注解组成,其中的@EnableAutoConfiguration就是开启自动装配的注解,而@EnableAutoConfiguration里又有@Import注解,我们都知道通过实现ImportSelector接口+@Import注解是spring注册bean的一种方式。所以springboot只要在这个地方知道我们要装配的类的名字就可以了。Spring boot采用SPI机制,通过一种约定来实现自动装配,也就是把你想要装配的类以k=v的形式放到META-INF/spring.factores文件,k就是org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

v就是我们想让springboot帮我们装配的全类名。

条件装配就是只有满足条件的时候spring boot才会帮我们装配,比如spring-boot-starter-data-redis依赖,它是springBoot提供的整合所以这一依赖包下不需要写spring.factores,所以redis相关的对象配置类实在springBoot中的,所以springboot不可能一启动就装配你,他需要判断,这就是条件装配,redis配置类中,会有@ConditionalOnClass注解,也就是只有当我们加入redis-stater这个依赖,spring boot才会帮我们装配

条件装配的另一种配置方式就是在

META-INF/spring-autoconfigure-metadata.properties文件里配置

你可能感兴趣的:(Spring,Boot,面试,spring,boot,java,面试)