1、注解@SpringBootApplication是实现自动装配的核心注解。
一般放在项目的启动类上,它可以把启动类注入到容器之中,并且定义容器扫描范围。
我们进到该注解中。会发现核心注解@EnableAutoConfiguration进入注解中便会看到两个核心注解@EnableAutoConfiguration和@Import(AutoConfigurationImportSelector.class)
1)@AutoConfigurationPackage该注解的核心是进行包扫描。
进入@Import(AutoConfigurationPackages.Registrar.class)注解之中神秘的面纱也就显现出来了。
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
register(registry, new PackageImports(metadata).getPackageNames().toArray(new String[0]));//注册扫描包下的注解
}
@Override
public Set<Object> determineImports(AnnotationMetadata metadata) {
return Collections.singleton(new PackageImports(metadata));
}
}
2)@Import(AutoConfigurationImportSelector.class)该注解的主要功能是自动装配。进去之后便会找到核心代码
protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
if (!isEnabled(annotationMetadata)) {
return EMPTY_ENTRY;
}
AnnotationAttributes attributes = getAttributes(annotationMetadata);
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
configurations = removeDuplicates(configurations);
Set<String> exclusions = getExclusions(annotationMetadata, attributes);
checkExcludedClasses(configurations, exclusions);
configurations.removeAll(exclusions);
configurations = getConfigurationClassFilter().filter(configurations);
fireAutoConfigurationImportEvents(configurations, exclusions);
return new AutoConfigurationEntry(configurations, exclusions);
}
2.quartz定时器在springboot中的应用。quartz的常用应用场景是火车票抢购、定期更新信息等。
1)首先是依赖的注入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2)创建一个车简单的quartz定时器
@Component
public class Tasktest {
@Scheduled(cron="0/10 * * * * ?")
public void task(){
System.out.println("每隔十秒调用一次");//代码逻辑
}
}
同时在启动类加上注解@EnableScheduling开启定时器