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组件定义

@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连接池。

使用步骤如下:

  1. 创建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>
  2. 在application.yml或properties追加连接参数定义

    spring:
    datasource:
    username: SCOTT
    password: TIGER
    url: jdbc:oracle:thin:@localhost:1521:XE
    driverClassName: oracle.jdbc.OracleDriver
  3. 在启动类前开启自动配置功能

    @SpringBootApplication
    public class MyBootApplication { }
  4. 测试类

    public static void main(String[] args) {
    ApplicationContext ac =
    SpringApplication.run(MyBootApplication.class, args);
    DataSource ds = ac.getBean("dataSource",DataSource.class);
    System.out.println(ds);
    }

创建指定连接池方法(方法一,推荐)

在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简单的理解的更多相关文章

  1. 玩转spring boot——简单登录认证

    前言 在一个web项目中,某些页面是可以匿名访问的,但有些页面则不能.spring mvc提供了HandlerInterceptor接口来应对,只需要重写preHandle方法便可以实现此功能.那么使 ...

  2. Spring Boot 简单小Demo 转载!!!

    Spring Boot简介 接下来我们所有的Spring代码实例将会基于Spring Boot,因此我们先来了解一下Spring Boot这个大杀器. Spring早期使用XML配置的方式来配置Spr ...

  3. windows下elasticsearch配置及spring boot 简单demod的 整合

    学习过程: elasticsearch 下载安装 elasticsearch-head 安装 spring boot 下elasticsearch的配置 使用ElasticsearchReposito ...

  4. Spring Boot简单应用——会员管理系统

    简介 本项目是使用Spring Boot编写的一个简单的会员管理系统. 提供了会员的解决方案,主要有会员模块,管理员模块,礼品模块,商品模块,会员等级模块,生日提醒模块,积分模块,详细模块如下图 准备 ...

  5. spring boot简单的小demo(适合于初学者)

    import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...

  6. RabbitMQ(三):RabbitMQ与Spring Boot简单整合

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitM ...

  7. Spring Boot简单环境搭建

    #### 一.创建一个简单的Maven项目 使用`Maven`,通过导入`Spring Boot`的`starter`模块,可以将许多程序依赖的包自动导入到工程中.使用`Maven`的`parent ...

  8. 十、Spring boot 简单优雅的整合 Swagger2

    前言 swagger2 是什么,我这里就不说了,就是一个简单的接口文档,方便前后端联调. 其实之前没有想要到要使用swagger 的.因为我之前用的是YAPI ,不过这个是一个单独的工具.并且是开源的 ...

  9. spring Boot 简单的登录功能,利用了jdbcTemplate.class完成sql语句的执行,无需service层、dao层和.xml文件

    1.搭建SpringBoot项目首先我们先在IDEA上创建一个SpringBoot的Web项目(1)file ——> new ——> project——> Spring Initia ...

  10. Spring Boot简单操作

    目录 一.自定义异常页面 二.单元测试 ​三.多环境选择 四.读取主配置文件中的属性 五.读取List属性 一.自定义异常页面 对于404.405.500等异常状态,服务器会给出默认的异常页面,而这些 ...

随机推荐

  1. Zimbra无需登录RCE漏洞利用

    2019年3月13号,一名国外的安全研究员在他的博客上公布了zimbra RCE漏洞相关信息,但其中并未提到一些漏洞利用细节. 经过一段时间努力,根据网上各位大牛的分析和我自己的理解,在此我将整个漏洞 ...

  2. (转)为什么要重写 hashcode 和 equals 方法?

    作者丨hsm_computer cnblogs.com/JavaArchitect/p/10474448.html 我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候 ...

  3. Weekly Contest 129

    1020. Partition Array Into Three Parts With Equal Sum Given an array A of integers, return true if a ...

  4. Python 使用 os 模块遍历目录/获取当前文件的路径

    1.列出指定目录下所包含的目录 item = os.listdir("/Users/jinchengxie/go") 返回的是一个列表, 里面包含了指定目录下所包含的所有的目录 2 ...

  5. JavaScript基础语法及数组相关方法(1)

    day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html <!DOCTYPE html> <html lang=" ...

  6. 微信Netting-QRLJacking分析利用-扫我二维码获取你的账号权限

    首先我们来看一下QRLJacking的实际原理:.攻击者首先进行客户端QR会话,并将登录QR码复制到网络钓鱼网站.“现在,一个精心制作的网络钓鱼页面有一个有效和定期更新的QR码可以被发送给受害者.” ...

  7. 高仿IOS下拉刷新的粘虫效果

    最近看需要做一款下拉刷新的效果,由于需要和Ios界面保持一致,所以这用安卓的方式实现了ios下的下拉刷新的粘虫效果. 最新的安卓手机版本的QQ也有这种类似的效果,就是拖动未读信息的那个红色圆圈,拖动近 ...

  8. struts2中s:select标签的使用

    1.第一个例子: <s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00& ...

  9. vue2.0函数(箭头函数)的this作用域

    在做vue项目时用到了axios,但是发现axios请求之后的回调函数里this并不指向当前vue实例,从而导致浏览器报错. 出错代码及结果: created : function(){ axios. ...

  10. P1631 序列合并

    P1631 序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 对于100%的数据中,满足1<=N<=100000. ...