spring boot 1.5.4 入门和原理(二)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

JDK 7及以上

eclipse开发工具

项目管理工具Maven

本文采用Java 1.7.0_60Spring Boot 1.5.4.RELEASE(或1.5.2.RELEASE调试通过。

 

spring-boot相关项目源码,

码云地址:https://git.oschina.net/wyait/springboot1.5.4.git

github地址https://github.com/wyait/spring-boot-1.5.4.git

1.2  Maven构建项目

方案一:从官网构建:http://start.spring.io/

wKiom1m_QGfDHcY9AADIfk3b3-8651.png

generate Project到本地:demo.zip

wKioL1m_UESCgn-lAAArrRHlIJA590.png

解压,importeclipse中即可。

方案二:手动创建

wKiom1m_UI3hijTfAAAZ5f8gR4s556.png

项目源码链接:

码云地址:https://git.oschina.net/wyait/springboot1.5.4.git

github地址https://github.com/wyait/spring-boot-1.5.4.git


  • pom.xml文件中导入依赖:

<parent>

<!-- 如果本地没有依赖包,去中央仓库下载

spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加。-->

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-parent</artifactId>

      <version>1.5.4.RELEASE</version>

   </parent>

<dependencies>

      <dependency>

        <!-- spring boot 引入Web模块 -->

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

      </dependency>

      <dependency>

        <!--  暂时用不上 spring-boot-starter:核心模块,包括自动配置支持、日志和YAML-->

          <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-starter</artifactId>

      </dependency>

      <dependency>

        <!-- spring-boot-starter-test:测试模块,包括JUnitHamcrestMockito-->

         <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-starter-test</artifactId>

         <scope>test</scope>

      </dependency>

</dependencies>

 

   <build>

      <plugins>

        <plugin>

           <!-- 配置spring bootmaven插件 -->

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-maven-plugin</artifactId>

        </plugin>

      </plugins>

   </build>

 

  • 编写controller

   新建包:com.wyait.boot   com.wyait.boot.controller

   新建启动类:HelloApplication

/**

 *

 * @项目名称:springboot

 * @类名称:HelloApplication

 * @类描述:我的第一个springboot启动类

 * @创建人:wyait

 * @创建时间:2017626上午11:28:57

 * @version1.0

 */

@Configuration//这是一个配置Spring的配置类

@SpringBootApplication//@SpringBootApplicationSpring Boot项目的核心注解,主要目的是开启自动配置。

public class HelloApplication {

  

   publicstatic void main(String[] args) {

      //启动spring boot应用

      SpringApplication.run(HelloApplication.class,args);

   }

}

   新建HelloController

/**

 *

 * @项目名称:springboot

 * @类名称:HelloController

 * @类描述:第一个spring Boot Controller

 * @创建人:wyait

 * @创建时间:2017626上午11:35:19

 * @version

 */

@Controller

public class HelloController {

 

   @RequestMapping("/hello")

   @ResponseBody

   publicString hello() {

      return"hello spring boot!";

   }

}

   启动项目:

方式一:Run AsàJava Application

wKiom1m_UKrx37zdAAD2H4rzq7c120.png

方式二:选中项目—>Run As-->Maven Build…-->spring boot:run(不推荐使用。网上说是配置热部署之后,重复启动有端口占用问题)

wKiom1m_ULXRSYKYAAC7Ag-6UEY973.png

启动console效果:

wKioL1m_UJCyaq2hAAHktR7Pmb4519.png

   访问测试:http://127.0.0.1:8080/hello

wKioL1m_UJzQ8lKuAAA7Krb6Go0583.png

 

2      spring boot核心

下载Spring Boot源码

2.1  入口类和@SpringBootApplication

Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。

 

  • @SpringBootApplication注解,是Spring Boot的核心注解,是一个组合注解。跟踪源码:

wKiom1m_UN3ysO_vAABhQha2u6c565.png

  • @SpringBootConfiguration也是组合注解:

wKioL1m_ULbidgVBAAAq2Kfuqdg662.png

  • @EnableAutoConfiguration:启动自动配置,该注解会使Spring Boot根据项目中配置的依赖,自动配置所需的依赖jar包:比如:我们添加了spring-boot-starter-web配置,Spring Boot会自动配置tomcatSpring MVC

wKiom1m_UPCy3wyFAAAz0CsuR6I718.png

  • @ComponentScan:默认扫描@SpringBootApplication所在类的同级目录和它的子目录(当前包以及它的子包)。

  • 关闭自动配置

查看spring-boot-autoconfigure的自动配置实现。。。。too much

wKiom1m_UPqzjCp4AAAzxU-EEyw579.png

在实际的开发中,我们可能不需要某一项进行自动配置。这时候如何设置?

 

比如:项目中不需要redis自动配置:找到自动配置中对应的后缀为:*AutoConfiguration.class文件

wKioL1m_UNySU3R8AABKW0ii1lA999.png

只需要在@SpringBootApplication注解后面添加(exclude={RedisAutoConfiguration.class}

wKioL1m_UO_B7hDbAABZeHwHpIY222.png

 

其他配置类似。

2.3  全局配置文件

Spring Boot项目使用全局的配置文件是:application.propertiesapplication.yml,在/resources目录下或者类路径下/config下,一般我们都放在/resources

  • 新建application.properties文件

wKiom1m_US3w2fLPAAAXzV067AI065.png

更多更详细的配置参考文件:application.propertiesSpring Bootapplication配置详解》  或参考官网http://projects.spring.io/spring-boot/

  • 添加设置端口配置:

  • 修改进入DispatcherServlet的规则为:*.html

wKioL1m_UXrzy6J-AAANo390o94983.png

重新启动,访问:

wKioL1m_UQayKWNEAAA6iKM-rm8664.png


 

2.4  starter pom相关依赖

wKiom1m_Udahw5FdAABYBctYIhQ822.png

wKiom1m_Ud_wRhIoAADW2i7YDqU685.png

wKioL1m_UbiRSDu7AAHUaYpOlqk513.png

 

wKioL1m_UcKwVv3EAAHUaYpOlqk779.png

wKiom1m_UfuASbNpAAFk1aybdcU309.png

 

2.5  Spring Boot自动配置原理

Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该文件中的配置载入到spring容器中。

跟踪源码:

wKiom1m_UgWwk8XeAAAeszXctNU802.png

找到SpringApplication的初始化方法:initialize();

wKiom1m_UiGyXXQXAAFqXs4Cd_c287.png

//获取spring工厂配置数据

setInitializers((Collection)getSpringFactoriesInstances(

                            ApplicationContextInitializer.class));

wKiom1m_UjHCuzvAAACE_GvSTJM012.png

//读取spring.factories中的元素集合数据

Set<String>names = new LinkedHashSet<String>(

                            SpringFactoriesLoader.loadFactoryNames(type,classLoader));

wKiom1m_UnajMuLkAADbKdOMvDE695.png


读取资源数据:

FACTORIES_RESOURCE_LOCATION= "META-INF/spring.factories";

wKioL1m_UhGQeO2xAAAe7ncjoX8660.png

META-INF/spring.factories文件在Spring-Boot-autoconfigura-1.5.4.RELEASE.jar包下面:

里面存放了所有自动配置启动类信息。

wKioL1m_UlizAt5JAAIiiOpVG6Q209.png

2.6  举例:redis自动配置

找到RedisAutoConfiguration,跟踪源码:

wKiom1m_Up6wR4jbAAEIi_fDENE684.png

@ConditionalOnClass({JedisConnection.class, RedisOperations.class, Jedis.class })意思是:如果同时存在这三个类,就自动配置redis,进行redis实例化。否则不进行实例化。

RedisProperties读取配置信息,进行redis实例化

wKioL1m_Un_w6eK6AAD1NQtof-E518.png

具体细节,可以跟踪源码查看。。。//TODO

2.7  条件注解

wKioL1m_UpKRfhGkAABL0fiVJnY330.png

wKiom1m_UszRg8P3AAD7w-vX8Oc421.png



本文转自 wyait 51CTO博客,原文链接:http://blog.51cto.com/wyait/1966302,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
XML Java 开发者
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
41 0
|
15天前
|
存储 安全 Java
Spring Security 入门
Spring Security 是 Spring 框架中的安全模块,提供强大的认证和授权功能,支持防止常见攻击(如 CSRF 和会话固定攻击)。它通过过滤器链拦截请求,核心概念包括认证、授权和自定义过滤器。配置方面,涉及密码加密、用户信息服务、认证提供者及过滤器链设置。示例代码展示了如何配置登录、注销、CSRF防护等。常见问题包括循环重定向、静态资源被拦截和登录失败未返回错误信息,解决方法需确保路径正确和添加错误提示逻辑。
Spring Security 入门
|
16天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
4天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
90 7
|
23天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
81 14
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
67 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
Java 数据库连接 数据库
从入门到精通---深入剖析Spring DAO
在Java企业级开发中,Spring框架以其强大的功能和灵活性,成为众多开发者的首选。Spring DAO(Data Access Object)作为Spring框架中处理数据访问的重要模块,对JDBC进行了抽象封装,极大地简化了数据访问异常的处理,并能统一管理JDBC事务。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring DAO,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
25 1
|
2月前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
57 5
|
2月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
2月前
|
Java Spring
SpringBoot自动装配的原理
在Spring Boot项目中,启动引导类通常使用`@SpringBootApplication`注解。该注解集成了`@SpringBootConfiguration`、`@ComponentScan`和`@EnableAutoConfiguration`三个注解,分别用于标记配置类、开启组件扫描和启用自动配置。
64 17