1.首先来看一下启动类都包含的内容再来一一解释。
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }, scanBasePackages = { "com.hskc.base.*", "com.hskc.tools.*",
"com.integration.security.*" })
@EnableConfigurationProperties
@EnableTransactionManagement
@EnableAutoConfiguration
public class IntegrationSecurityApplication {
public static void main(String[] args) {
SpringApplication.run(IntegrationSecurityApplication.class, args);
}
}
2.首先看到的是@SpringBootApplication,这个注解经常被使用,其实@SpringBootApplication中包含着@SpringBootConfiguration ,@EnableAutoConfiguration ,@ComponentScan这三个注解,这一个注解就代替了这三个注解。
2.1 @ComponentScan
使用Spring框架的都知道,Spring里面有四大注解:
@Service ,@Repository,@Component,@Controller用来定义一个bean,@ComponentScan的作用就是自动扫描被这些注解标识的类,最终生成IOC容器里面的bean,可以通过设置@ComponentScan basePackages,includeFilters,excludeFilters属性来动态确定自动扫描范围,默认情况下:它扫描所有的类型,并且扫描范围是@ComponentScan注解所在的配置类包及子包的类。
上面的启动类中的scanBasePackages 就是指定默认扫描的包。
2.2@SpringBootConfiguration
这个注解的作用与@Configuration的作用相同,都是用来声明当前类是一个配置类,可以通过@bean注解生成IOC容器管理的bean,并在controller中注入使用。
2.3@EnableAutoConfiguration
@EnableAutoConfiguration是SpringBoot实现自动化配置的核心注解,通过这个注解把spring应用的所需bean注入容器中,@EnableAutoConfiguration
源码用过@Import注入了一个ImportSelector的实现类AutoConfigurationImportSelector,这个ImportSelector最终实现根据我们的配置,动态加载所需的bean。
上面的启动类中@SpringBootApplication注解后面的exclude是这个注解的属性,其中DataSourceAutoConfiguration.class的意思是取消数据库配置,这是因为SpringBoot默认会自动配置数据库,如果业务不需要,就要手动的禁用数据库自动配置。否则就会报错。
- @EnableConfigurationProperties,springboot提供该注解将配置文件的值映射到类上使用,下面演示一个例子。
3.1 这是我们在application.yml配置的连接池学习。
3.2 通过@ConfigurationProperties注解则会将该值映射到该类中。
3.3 通过@Autowired标签即可访问到该对象,不过在使用类上面增加注解
@EnableConfigurationProperties(DruidDataSourceProperties.class)
4.@EnableTransactionManagement这个注解的作用是启动事务,首先使用@EnableTransactionManagement开启事务之后,在访问数据库的service方法上添加注解@Transactional即可实现事务,等同于xml配置方式的 <tx:annotation-driven />
在Service上,被@Transactional注解的方法,将支持事务,如果注解在类上,那么整个类的所有方法都默认支持事务。
5.SpringApplication.run(IntegrationSecurityApplication.class, args);
class类执行面方法,main方法调用了SpringApplication的run方法。
run方法干了两个事情:
1.创建SpringApplication对象。
2.利用创建好的SpringApplication对象调用run方法。
创建SpringApplication对象:
在执行SpringApplication的run方法时首先会创建一个SpringApplication类的对象,利用构造方法创建SpringApplication对象时会调用initialize方法。
SpringApplication.run一共做了两件事情:
1.创建SpringApplication对象;在初始化时保存事件监听器,容器初始化类以及判断是否为web应用,保存包含main方法的主配置类。
2.调用run方法:准备Spring的上下文,完成容器的初始化,创建,加载等,会在不同的时机触发监听器的不同事件。