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);
}
}