上一篇笔记,写了一个SpringBoot的入门案例,这篇笔记对案例做一个分析。
- SpringBoot的简单介绍:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。可以轻松的创建独立运行的程序,非常容易构建独立的服务组件,是实现分布式架构、微服务架构利器。
SpringBoot的特点(优点)
- 内置Tomcat,可以直接部署,而不依赖外部Tomcat
- 简化MAVEN配置,提供一系列工具包集合
- spring-boot-starter-web(包含内置tomcat、mvc、restful)
- spring-boot-starter-jdbc(包含tomcat-jdbc连接池、spring-jdbc功能、JdbcTemplate)
- spring-boot-starter-aop(包含Spring AOP)
- spring-boot-starter-test(包含Spring test测试框架)
- spring-boot-starter-parent(包含spring boot底层通用设置和功能)
- spring-boot-starter(包含ioc、自动配置、日志功能)
- 自动配置Spring组件(重要特点)
- 采用Java配置替代了XML配置(完全取消了XML配置形式)
SpringApplication.run()方法启动Boot应用程序,创建Spring容器对象,如果有内置Tomcat会自动启动,并返回ApplicationContext。
@SpringBootApplication注解标记开启了SpringBoot中组件扫描、自动配置、组件定义功能。
@SpringBootApplication标记包含以下子标记:
- @ComponentScan(组件扫描)
- @EnableAutoConfiguration (自动配置)
@SpringBootConfiguration (组件定义)
等价于@Configuration,内部还支持扫描功能。
@SpringBootConfiguration/@Configuration (组件定义)
可以将Java创建的组件对象放入到Spring容器对象中。 一般采用@Configuration+@Bean组合使用。
等价于之前XML定义部分@Configuration public class DataSourceConfiguration { @Bean//将返回对象放入Spring容器中,id名为方法名 public MyDataSource myDs(){ MyDataSource ds = new MyDataSource(); return ds; } @Bean(name="ds")//将返回对象放入Spring容器中,id名为ds public MyDataSource myDs1(){ MyDataSource ds = new MyDataSource(); return ds; } }
<beans> <bean id="myDs" class="cn.xdl.bean.MyDataSource"/> <bean id="ds" class="cn.xdl.bean.MyDataSource"/> </beans>
@ComponentScan(组件扫描)
可以按指定或默认包路径扫描组件,将对象放入Spring容器中。
等价于之前XML定义package cn.xdl; import org.springframework.context.annotation.ComponentScan; //@ComponentScan(basePackages="cn.xdl.dao")//扫描cn.xdl.dao包下组件 @ComponentScan//扫描当前包及子包下组件 public class MyComponentScan { }
提示:也可以扫描带有@Configuration注解标记的组件(内部含有@Component标记)。<context:component-scan base-package="cn.xdl"/>
@EnableAutoConfiguration (自动配置)
开启自动扫描注解,会自动加载spring-boot-autoconfigurer.jar中的META-INF/spring.factories文件,文件中定义了大量的Configuration组件(自动配置组件)。org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
原理:boot底层提供了大量自动配置组件,替代原有xml中定义(@Configuration+@Bean)。
- 基于自动配置获取dispatcherServlet对象 在pom.xml添加spring-boot-starter-web定义
开启自动配置,创建Spring容器,使用id=dispatcherServlet获取<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
package cn.xdl; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @EnableAutoConfiguration//启用自动配置 public class MyAutoConfiguration { } public static void main(String[] args) { ApplicationContext ac = SpringApplication.run(MyAutoConfiguration.class, args); Object obj = ac.getBean("dispatcherServlet"); System.out.println(obj); }
- 基于自动配置获取dataSource和jdbcTemplate对象
在pom.xml添加spring-boot-starter-jdbc和驱动包定义 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> </dependency>
spring.datasource.username=SCOTT
spring.datasource.password=TIGER
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.dirverClassName=oracle.jdbc.OracleDriver
在开启自动配置,创建Spring容器,使用DataSource、jdbcTemplate做id获取
public static void main(String[] args) {
ApplicationContext ac =
SpringApplication.run(MyAutoConfiguration.class, args);
Object obj = ac.getBean("dataSource");
System.out.println(obj);
obj = ac.getBean("jdbcTemplate");
System.out.println(obj);
}
在pom.xml添加spring-boot-starter-jdbc和驱动包定义