目录
一、SpringBoot 产生原因
以往的项目整合起来是比较繁琐复杂的,而且存在架包冲突的问题,这时候SpringBoot应运而生。
二、SpringBootApplication背后的秘密
我们开发任何一个Spring Boot项目,都会用到如下的启动类
@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
要揭开SpringBoot的神秘面纱,我们从Annotation定义(@SpringBootApplication)和类定义 (SpringApplication.run)入手。
@Target(ElementType.TYPE)
// 注解的适用范围,其中TYPE用于描述类、接口(包括包注解类型)
或enum声明
@Retention(RetentionPolicy.RUNTIME) // 注解的生命周期,保留到class文件中(三个生命周
期)
@Documented
// 表明这个注解应该被javadoc记录
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
器之一,其
@ComponentScan(excludeFilters = {
// 子类可以继承该注解
// 继承了Configuration,表示当前是注解类
// 开启springboot的注解功能,springboot的四大神
//借助@import的帮助
// 扫描路径设置(具体使用待确认)
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes =
AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {...}
虽然定义使用了多个Annotation进行了原信息标注,但实际上重要的只有三个Annotation: 1.@Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
2.@EnableAutoConfiguration
3.@ComponentScan 即 @SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
所以,如果我们使用如下的SpringBoot启动类,整个SpringBoot应用依然可以与之前的启动类功能对 等:
@Configuration@EnableAutoConfiguration@ComponentScanpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
2.1 分别介绍这3个Annotation
2.1.1 @Configuration
这里的@Configuration对我们来说不陌生,它就是JavaConfig形式的Spring Ioc容器的配置类使用的那 个@Configuration,SpringBoot社区推荐使用基于JavaConfig的配置形式,所以,这里的启动类标注 了@Configuration之后,本身其实也是一个IoC容器的配置类。 举几个简单例子回顾下,XML跟config配置方式的区别:
表达形式层面
基于XML配置的方式是这样:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"default-lazy-init="true"><!--bean定义--></beans>
而基于JavaConfig的配置方式是这样:
@Configurationpublic class MockConfiguration{//bean定义
}
任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。
注册bean定义层面
基于XML的配置形式是这样:
<bean id="mockService" class="..MockServiceImpl">...</bean>
而基于JavaConfig的配置形式是这样的:
@Configurationpublic class MockConfiguration{@Beanpublic MockService mockService(){return new MockServiceImpl();}}
任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认 成该bean定义的id。
表达依赖注入关系层面
为了表达bean与bean之间的依赖关系,在XML形式中一般是这样:
<