springboot自动装配的原理

1 springboot相较于spring的优点**

(1) springboot简化了spring的配置,通过注解的形式进行装配,提高了开发效率。
(2) springboot有内置的Tomcat服务器等,便于项目的部署。

2 关键springboot启动类上的@SpringbootApplication

@SpringBootApplication
public class PlatformApplication {

}

@SpringbootApplication由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan注解组成

@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 {

}

各个注解的作用:

@ComponentScan:默认扫描启动类所在的包路径,将有@Controller、@Service等注解的类交给spring容器
@SpringBootConfiguration:里面包括@Configuration注解、是一个配置类,等同于spring中的xml配置文件,可被组件扫描器扫描到spring容器。
@EnableAutoConfiguration:会扫描外部库中的spring-boot-autoconfigure中的META-INF中的spring.factories中的各种第三方的AutoConfiguration 如:RedisAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

}
@EnableAutoConfiguration扫描第三方的热插拔组件的流程:

在这里插入图片描述
如: springboot在pom文件中引入redis的依赖后,会自动将RedisTemplate注入到spring容器中 项目中就可以使用@Autowired注入RedisTemplate或者对RedisTemplate进行重新定义改造

@Configuration(
    proxyBeanMethods = false
)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
    public RedisAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean(
        name = {"redisTemplate"}
    )
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        return new StringRedisTemplate(redisConnectionFactory);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值