Spring-boot简单的理解
SpringBoot启动
SpringApplication.run(MyBootApplication.class);
SpringApplication.run启动SpringBoot应用,主要过程
- 要创建Spring容器对象
- 根据MyBootApplication注解标记功能创建Bean组件对象纳入Spring容器中(@SpringBootApplication)
- 如果是web程序,会自动启动Tomcat服务器,并将程序发布到服务器上
- 用户可以对SpringBoot程序访问
@SpringBootApplication作用
@SpringBootApplication注解是一个多功能标记,主要包含以下子标记功能:
查看源码得知:@SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解所修饰,换言之 Springboot 提供了统一的注解来替代以上三个注解,简化程序的配置。
@SpringBootConfiguration(@Configuration)
等价于Spring Boot Bean定义标记。<bean id="xxx"></bean>
来一个简单接口和实现类:
- //接口
- public interface IDeptDao {
- void save();
- }
- //实现类
- public class DeptDao implements IDeptDao {
- public void save(){
- System.out.println("正在配置.......");
- }
- }
- //@Configuration //两者意义相同,@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,
- @SpringBootConfiguration //并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
- public class MyConfigurationBean {
- //@Primary //主对象,默认注入时采用的对象
- @Bean//将当前的方法纳入到spring容器中,id默认为方法名
- public IDeptDao deptdao() {
- IDeptDao dept = new DeptDao();
- return dept;
- }
- @Bean(name="deptDao1")//将当前对象纳入到spring容器中,并指定名字
- public IDeptDao deptDao() {
- IDeptDao dept = new DeptDao();
- return dept;
- }
- }
测试:
- public class TestConfigurationBean {
- // 实例化Spring Boot容器
- public static void main(String[] args) {
- ApplicationContext app = SpringApplication.run(MyBootApplication.class, args);
- DeptService bean = app.getBean("deptService", DeptService.class);
- bean.addDept();
- }
- }
- //结果:
正在将数据加入到数据库中....
正在配置.......
@EnableAutoConfiguration
Spring Boot 自动配置标记。SpringBoot内置大量的自动配置组件,可以在启动时加载创建对象纳入Spring容器,例如dispatcherServlet、dataSource、jdbcTemplate等等。
加载原理:开启@EnableAutoConfiguration标记后,调用EnableAutoConfigurationImportSelector组件加载spring-boot-autoconfigure.jar包中META-INF/spring.factories文件,文件中定义了大量自动配置组件,载入Spring容器。
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,
@ComponentScan
SpringBoot 扫描标记.等价于<context:component-scan base-package="xx"/>
- @ComponentScan(basePackages={"cn.xdl.service"})//等价于<context:component-scan base-package="xx"/>,指定文件夹
- //@ComponentScan//扫描当前包及子包组件,一般需要将类放到根包中cn.xdl
- public class MyComponentScanBean {
- }
DeptService组件定义
- @ComponentScan(basePackages={"cn.xdl.service"})//等价于<context:component-scan base-package="xx"/>,指定文件夹
- @Service
- public class DeptService {
- public void addDept(){
- System.out.println("添加一个部门信息");
- }
- }
实例化Spring Boot容器:
- public static void main(String[] args) {
- ApplicationContext ac =
- SpringApplication.run(MyBootApplication.class);
- DeptService deptService =
- ac.getBean("deptService",DeptService.class);
- System.out.println(deptService);
- deptService.addDept();
- }
Properties配置参数注入
可以将application.properties文件中的参数注入给Spring容器中的Bean对象。
- @Component//扫描
- @ConfigurationProperties(prefix="spring.datasource")//配置参数注入
- public class MyBean {
- private String myname;//与application.properties中key相同
- private String mypassword;
- @Value("${db.url1}")
- private String url1;
- //省略set和get方法
- }
@ConfigurationProperties指定将application.properties中同名参数给Bean对象属性注入,如果有key有共通前缀,可以使用prefix属性指定。如果遇到特殊key可以使用@Value标记注入。@ConfigurationProperties需要开启自动配置功能@EnableConfigurationProperties或@EnableAutoConfiguration。
SpringBoot内置dataSource机制
SpringBoot通过自动配置组件DataSourceAutoConfiguration,自动创建出DataSource对象,id名字为dataSource。创建过程如下:
- 首先创建tomcat-jdbc连接池对象(spring-boot-starter-jdbc包含有)
- 如果tomcat-jdbc创建失败,会查找创建Hikari连接池对象
- 如果Hikari创建失败,会查找创建commons-dbcp连接池对象
- 如果commons-dbcp创建失败,会查找创建commons-dbcp2连接池对象
提示:spring-boot-starter-jdbc在1.x版本中配套引入tomcat-jdbc连接池,但是在2.x版本中配套引入HikariCP连接池。
使用步骤如下:
创建maven project在pom.xml定义jdbc
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.4.7.RELEASE</version>
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <!-- 含有dao、aop事务、连接池包(1.x tomcat/2.x HikariCP) -->
- <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>
- </dependencies>
- <parent>
在application.yml或properties追加连接参数定义
- spring:
- datasource:
- username: SCOTT
- password: TIGER
- url: jdbc:oracle:thin:@localhost:1521:XE
- driverClassName: oracle.jdbc.OracleDriver
- spring:
在启动类前开启自动配置功能
- @SpringBootApplication
- public class MyBootApplication {
- }
- @SpringBootApplication
测试类
- public static void main(String[] args) {
- ApplicationContext ac =
- SpringApplication.run(MyBootApplication.class, args);
- DataSource ds = ac.getBean("dataSource",DataSource.class);
- System.out.println(ds);
- }
- public static void main(String[] args) {
创建指定连接池方法(方法一,推荐)
在application.yml或properties追加下面参数
spring.datasource.type=org.apache.commons.dbcp.BasicDataSource
创建指定连接池方法(方法二)
使用@Configuration+@Bean自定义dataSource对象
- @SpringBootApplication
- public class MyBootApplication {
- @ConfigurationProperties(prefix="spring.datasource")
- @Bean
- public DataSource dataSource(){
- BasicDataSource ds = new BasicDataSource();
- return ds;
- }
- }
Spring-boot简单的理解的更多相关文章
- 玩转spring boot——简单登录认证
前言 在一个web项目中,某些页面是可以匿名访问的,但有些页面则不能.spring mvc提供了HandlerInterceptor接口来应对,只需要重写preHandle方法便可以实现此功能.那么使 ...
- Spring Boot 简单小Demo 转载!!!
Spring Boot简介 接下来我们所有的Spring代码实例将会基于Spring Boot,因此我们先来了解一下Spring Boot这个大杀器. Spring早期使用XML配置的方式来配置Spr ...
- windows下elasticsearch配置及spring boot 简单demod的 整合
学习过程: elasticsearch 下载安装 elasticsearch-head 安装 spring boot 下elasticsearch的配置 使用ElasticsearchReposito ...
- Spring Boot简单应用——会员管理系统
简介 本项目是使用Spring Boot编写的一个简单的会员管理系统. 提供了会员的解决方案,主要有会员模块,管理员模块,礼品模块,商品模块,会员等级模块,生日提醒模块,积分模块,详细模块如下图 准备 ...
- spring boot简单的小demo(适合于初学者)
import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...
- RabbitMQ(三):RabbitMQ与Spring Boot简单整合
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitM ...
- Spring Boot简单环境搭建
#### 一.创建一个简单的Maven项目 使用`Maven`,通过导入`Spring Boot`的`starter`模块,可以将许多程序依赖的包自动导入到工程中.使用`Maven`的`parent ...
- 十、Spring boot 简单优雅的整合 Swagger2
前言 swagger2 是什么,我这里就不说了,就是一个简单的接口文档,方便前后端联调. 其实之前没有想要到要使用swagger 的.因为我之前用的是YAPI ,不过这个是一个单独的工具.并且是开源的 ...
- spring Boot 简单的登录功能,利用了jdbcTemplate.class完成sql语句的执行,无需service层、dao层和.xml文件
1.搭建SpringBoot项目首先我们先在IDEA上创建一个SpringBoot的Web项目(1)file ——> new ——> project——> Spring Initia ...
- Spring Boot简单操作
目录 一.自定义异常页面 二.单元测试 三.多环境选择 四.读取主配置文件中的属性 五.读取List属性 一.自定义异常页面 对于404.405.500等异常状态,服务器会给出默认的异常页面,而这些 ...
随机推荐
- NetCore入门篇:(五)Net Core项目使用静态文件
一.简介 1.Net Core默认无法访问静态文件,需要在Startup通过代码添加定义. 2.本文介绍两种静态文件目录实现方式. 二.启用默认目录 1.添加图片文件 2.测试访问结果(不能访问) 3 ...
- Mongoose也是个大坑
http://blog.csdn.net/qq_31280709/article/details/53900290 折腾了两个小时,MLGB居然是因为mongoose查询集合的时候自动加s后缀!!!
- Day 62 Django第三天
2.GET请求能够被cache,GET请求能够被保存在浏览器的浏览历史里面(密码等重要数据GET提交,别人查看历史记录,就可以直接看到这些私密数据)POST不进行缓存. 3.GET参数是带在URL后面 ...
- Android---------------Service的学习
一.创建与启动Servcie的三个步骤 : 1. 创建一个类并继承Servcie 2.在配置文件中注册服务 3.通过Intent来启动服务 二.Service的两种启动方式 1.startServce ...
- svn update 产生Node remains in conflict的问题
输入:sudo svn revert --depth=infinity frontend/web/js/workplace/organization.js 最后在执行 svn up 就ok了
- spring boot 使用application.properties 进行外部配置
application.properties大家都不陌生,我们在开发的时候,经常使用它来配置一些可以手动修改而且不用编译的变量,这样的作用在于,打成war包或者jar用于生产环境时,我们可以手动修改环 ...
- JavaScript函数学习总结(一)---函数定义
博客原文地址:Claiyre的个人博客 如需转载,请在文章开头注明原文地址 在许多传统的OO语言中,对象可以包含数据,还可拥有方法,也就是属于该对象的函数.但在JavaScript中,函数也被认为是一 ...
- 如何修改静态IP地址和动态IP地址
打开控制面板,一般在电脑的菜单栏能找到,win8和win10可以使用快捷键(win键+X键),找不到的朋友可以搜索一下. 进入到网络和共享中心,点击更改适配器设置. 这里显示的是电脑所以的网络 ...
- RabbitMQ - Start Up
开始之前 rabbitmq是一个被广泛使用的消息队列,它是由erlang编写的,根据AMQP协议设计实现的. AMQP的主要特征是面向消息.队列.路由(包括点对点和发布/订阅).可靠性.安全. Rab ...
- Swift 里字符串(九)UTF16View
即以 UTF16 编码的格式来查看字符串. UTF16View 是一个结构体 @_fixed_layout public struct UTF16View { @usableFromInline in ...