-
项目目录结构说明
-
启动类@SpringBootApplication
Spring Boot 1.2.0开始,实际包含3个注解功能
@Configuration //标明该类使用Spring基于Java的配置
@ComponentScan //启用组件扫描,Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean
@EnableAutoConfiguration //开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了 -
使用gradle bootRun命令,来启动
使用gradle命令来启动
gradle build
java -jar build/libs/readinglist-0.0.1-SNAPSHOT.jar -
测试类@SpringApplicationConfiguration
配置类里加载Spring应用程序上下文,标识如何加载Spring的应用程序上下文。
-
配置文件application.properties
server.port=8000 //应用启动端口修改
-
-
构建过程
构建插件的主要功能是把项目打包成一个可执行的超级JAR( uber-JAR),包括把应用程序的
所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序-
Gradle中的SpringBoot插件
//依赖插件
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:
➥ ${springBootVersion}")
}
//使用插件
apply plugin: 'spring-boot'gradle bootRun 运行程序
-
Maven中的SpringBoot插件
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>spring-boot:run 运行程序
-
-
使用起步依赖:基于功能的依赖
POM (Project Object Model)
起步依赖没有版本,起步依赖本身的版本是由正在使用的Spring Boot的版本来决定的,而起步依赖则会决定它们引入的传递依赖的版本。依赖树🌲:
gradle dependencies
mvn dependency:tree-
Maven和Gradle对传递依赖版本不同处理的差异
Maven:总是会用最近的依赖,也就是说,你在项目的构建说明文件里增加的这个依赖,会覆盖传递依赖引入的另一个依赖。
Gradle:倾向于使用库的最新版本。因此,如果你要使用老版本的Jackon,则不得不把老版本的依赖加入构建,并把Web起步依赖传递依赖的那个版本排除掉。
例如:
compile("com.fasterxml.jackson.core:jackson-databind:2.3.1")
compile("org.springframework.boot:spring-boot-starter-web") {
exclude group: 'com.fasterxml.jackson.core'
}
//如果starter里面传递依赖的jackson库大于2.3.1,就需要做exclude排除掉。而Maven就不用,直接依赖引入就可以了。==========
排除传递依赖写法:Gradle中:
compile("org.springframework.boot:spring-boot-starter-web") {
exclude group: 'com.fasterxml.jackson.core'
}Maven中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
-
-
使用自动配置
-
Web应用程序
-
1.定义领域模型(Model)
@Entity:标记JPA实体
id属性加了@Id和@GeneratedValue:唯一键 -
2.定义仓库接口
定义接口并继承JpaRepository<Book, Long> 接口
//<Book, Long>是实体类、ID
//继承了18个执行常用持久化操作的方法Spring Data提供了很神奇的魔法,只需定义仓库接口,在应用程序启动后,该接口在运行时会自动实现。
注意:自定义接口方法时,使用特定的命名方式才行:
比如:findByReader(String reader) 其中reader是一个表属性,这个表示查询的意思。 -
3.创建Web界面
Spring MVC控制器就能为应用程序处理HTTP请求。
Thymeleaf来定义应用程序的视图。@Controller
@RequestMapping("/") //来标记一个Controller@RequestMapping(value="/{reader}",method = RequestMethod.GET) //来标记某个方法,处理http请求
@Autowired 来装载Repository
方法返回值:
"readingList" 标记为thymeleaf模版文件,在目录resources/templates 目录下"redirect:/{reader}" 标记为重定向的某个http路径方法调用处理
-
资源文件 resources目录下
-
readBookList.html :模版html文件
<html>
<head>
<title>Reading List</title>
<link rel="stylesheet" th:href="@{/style.css}"></link>
</head>
<body>
<h2>Your Reading List</h2>
<div th:unless="{books}">
<dt class="bookHeadline">
<span th:text="{book.author}">Author</span>
(ISBN: <span th:text="{book.description}"
th:text="{book.description eq null}">
No description available</span>
</dd>
</dl>
</div>
<div th:if="${#lists.isEmpty(books)}">
<p>You have no books in your book list</p>
</div>
<h3>Add a book</h3>
<form method="POST">
<label for="title">Title:</label>
<input type="text" name="title" size="50"></input>
<label for="author">Author:</label>
<input type="text" name="author" size="50"></input>
<label for="isbn">ISBN:</label>
<input type="text" name="isbn" size="15"></input>
<label for="description">Description:</label>
<textarea name="description" cols="80" rows="5">
</textarea>
<input type="submit"></input>
</form>
</body>
</html> -
style.css
body {
background-color: #cccccc;
font-family: arial,helvetica,sans-serif;
}
.bookHeadline {
font-size: 12pt;
font-weight: bold;
}
.bookDescription {
font-size: 10pt;
}
label {
font-weight: bold;
}
-
-
-
自动配置基于条件化配置实现
条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。
条件化装载Bean:
1.使用@Configuration来标记装载Bean的配置类
2.使用@Bean来标记注入的Bean
3.使用@Conditional,进行条件化装配,比如有两个一样的Bean,通过条件化配置来匹配某个Bean===
自动化配置基于条件化配置实现:
@ConditionalOnClass
自动配置会做出以下配置决策,例如
因为Classpath里有Spring Data JPA,所以它会自动配置为根据仓库的接口创建仓库实现。
因为Classpath里有Thymeleaf,所以Thymeleaf会配置为Spring MVC的视图,包括一个
Thymeleaf的模板解析器、模板引擎及视图解析器。视图解析器会解析相对于Classpath根
目录的/templates目录里的模板。
因 为 Classpath 里 有 Spring MVC ( 归 功 于 Web 起 步 依 赖 ), 所 以 会 配 置 Spring 的
DispatcherServlet并启用Spring MVC。
-
XMind - Trial Version