springboot项目层次结构_Springboot项目结构Springboot项目结构

运用Spring Boot

在start.spring.io可以直接下载Spring Boot项目

|

| pom.xml

|

|

\---src

+---main

| +---java

| | \---com

| | \---zdx

| | \---readinglist

| | ReadingListApplication.java

| |

| \---resources

| | application.properties

| |

| +---static

| \---templates

\---test

\---java

\---com

\---zdx

\---readinglist

ReadingListApplicationTests.java

查看初始化Spring Boot 新项目

目录结构遵循传统Maven项目的布局

主要的应用代码位于src/main/java

资源文件位于src/main/resources

测试代码在src/test/java

如果有测试资源的话,应在src/test/resources

主要的文件:

ReadingListApplication.java应用程序的启动引导类(bootstrap class),也是主要的Spring配置类。

application.properties用于配置应用程序和Spring Boot的属性。

ReadingListApplicationTests.java一个基本的集成测试类。

启动引导Spring

ReadingListApplication.java在Spring中有两个作用:

配置

启动引导

虽然Spring Boot的自动配置免除了很多Spring配置,但你还需要进行少量配置来启用自动配置

默认情况下只有一行配置代码:

package com.zdx.readinglist;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

//开启组件扫描和自动配置

public class ReadingListApplication {

public static void main(String[] args) {

//负责启动引导应用程序

SpringApplication.run(ReadingListApplication.class, args);

}

}

@SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置功能,但实际上@SpringBootApplication将三个有用的注解组合在了一起:

@Configuration标明该类使用Spring基于Java的配置...

@ComponentScan启用组件扫描,这样自定义的Web控制器类和其他组件才会被自动发现并注册为Spring应用程序上下文里面的Bean

@EnableAutoConfiguration也被称为@Abracadabra:就是这一行配置开启了Spring Boot自动配置

在Spring Boot1.2.0前,需要在启动类上同时标上以上三个注解

配置应用程序的属性

默认生成的application.properties文件是一个空文件

如果application.properties存在就会被加载,无需指定

application.properties使用例子:

server.port=8000

加上这一行,嵌入式Tomcat的监听端口就变成了8000

Spring Boot 项目构建过程解析

Spring Boot为Gradle 和 Maven提供了构建插件 以便辅助构建Spring Boot项目...

选择Maven会替你生成一个pom.xml文件,其中使用了Spring Boot的Maven插件

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.1.7.RELEASE

com.zdx

readinglist

0.0.1-SNAPSHOT

Reading List

Reading List Demo

1.8

org.springframework.boot

spring-boot-starter-data-jpa

org.springframework.boot

spring-boot-starter-security

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-devtools

runtime

true

mysql

mysql-connector-java

runtime

org.springframework.boot

spring-boot-starter-test

test

org.springframework.security

spring-security-test

test

org.springframework.boot

spring-boot-maven-plugin

构建插件的主要功能是把项目打包成一个可执行的超级JAR(uber-JAR),包括把应用程序的所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序。

除了构建插件,还将spring-boot-starter-parent作为上一级,这样一来就能利用Maven的依赖管理功能继承很多常用库的依赖版本,在你声明依赖时就不用再去指定版本号了。请注意,这个pom.xml里的都没有指定版本

起步依赖

首先,假设不存在起步依赖,用Spring MVC的话,我们得晓得以下几点:

需要哪个Spring依赖

Thymeleaf的Group和Artifact ID

用哪个版本的Spring Data JPA

兼容问题

而这只不过是开发一个Spring Web应用程序,使用Thymeleaf视图,通过JPA进行数据持久化.但是在敲代码前,我们需要明白,要支持我们的项目,需要往POM.XML中加入哪些东西.

可能有以下几个:

org.springframework.boot

spring-boot-starter-data-jpa

2.1.7.RELEASE

org.springframework.boot

spring-boot-starter-security

2.1.7.RELEASE

org.springframework.boot

spring-boot-starter-thymeleaf

2.1.7.RELEASE

org.springframework.boot

spring-boot-starter-web

2.1.7.RELEASE

org.springframework.boot

spring-boot-devtools

2.1.7.RELEASE

runtime

true

mysql

mysql-connector-java

8.0.17

runtime

org.springframework.boot

spring-boot-starter-test

2.1.7.RELEASE

test

org.springframework.security

spring-security-test

5.1.6.RELEASE

test

这段依赖列表不错,应该能正常工作,但任何得知?在一行代码都没写的情况下,我们离开始构建还有很长的路要走

让我们退一步再想想,我们要做什么。我们要构建一个拥有如下功能的应用程序。

这是一个Web应用程序。

它用了Thymeleaf

它通过Spring Data JPA在关系型数据库里持久化数据

如果我们只在构建文件里指定这些功能,让构建过程自己搞明白我们要什么东西,岂不是更简单?这正是Spring Boot起步依赖的功能

覆盖起步依赖引入的传递依赖

以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库。如果你正在构建一个生产或消费JSON资源表述的REST服务,那它会很有用。但是,要构建传统的面向人类用户的Web应用程序,你可能用不上Jackson。虽然把它加进来也不会有什么坏处,但排除掉它的传递依赖,可以为你的项目瘦身.

org.springframework.boot

spring-boot-starter-web

com.fasterxml.jackson.core

另一方面,也许项目需要Jackson,但你需要用另一个版本的Jackson来进行构建,而不是Web起步依赖里的那个。假设Web起步依赖引用了Jackson 2.3.4,但你需要使用2.4.3。在Maven里,你可以直接在pom.xml中表达诉求,就像这样:

com.fasterxml.jackson.core

jackson-databind

2.4.3

使用自动配置

在向应用程序加入Spring Boot时,有个名为spring-boot-autoconfigure的JAR文件,其中包含了很多配置类。每个配置类都在应用程序的Classpath里,都有机会为应用程序的配置添砖加瓦。这些配置类里有用于Thymeleaf的配置,有用于Spring Data JPA的配置,有用于Spiring MVC的配置,还有很多其他东西的配置,你可以自己选择是否在Spring应用程序里使用它们。

所有这些配置如此与众不同,原因在于它们利用了Spring的条件化配置,这是Spring 4.0引入的新特性。条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。

在Spring里可以很方便地编写你自己的条件,你所要做的就是实现Condition接口,覆盖它的matches()方法。举例来说,下面这个简单的条件类只有在Classpath里存在JdbcTemplate时才会生效...

public class JdbcTemplateCondition implements Condition {

@Override

public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

try {

context.getClassLoader().loadClass("org.springframework.jdbc.core.JdbcTemplate");

return true;

} catch (ClassNotFoundException e) {

return false;

}

}

}

而当你用Java来声明Bean的时候,可以使用这个自定义条件类:

@Conditional(JdbcTemplateCondition.class)

public MyService myService() {

...

}

在这个例子里,只有当JdbcTemplateCondition类的条件成立时才会创建MyService这个Bean。也就是说MyService Bean创建的条件是Classpath里有JdbcTemplate。否则,这个Bean的声明就会被忽略掉。

这些配置类构成了Spring Boot的自动配置。 Spring Boot运用条件化配置的方法是,定义多个特殊的条件化注解,并将它们用到配置类上

条件化注解

配置生效条件

@ConditionalOnBean

配置了某个特定Bean

@ConditionalOnMissingBean

没有配置特定的Bean

@ConditionalOnClass

Classpath里有指定的类

@ConditionalOnMissingClass

Classpath里缺少指定的类

@ConditionalOnExpression

给定的Spring Expression Language( SpEL)表达式计算结果为true

@ConditionalOnJava

Java的版本匹配特定值或者一个范围值

@ConditionalOnJndi

参数中给定的JNDI位置必须存在一个,如果没有给参数,则要有JNDI InitialContext

@ConditionalOnProperty

指定的配置属性要有一个明确的值

@ConditionalOnResource

Classpath里有指定的资源

@ConditionalOnWebApplication

这是一个Web应用程序

@ConditionalOnNotWebApplication

这不是一个Web应用程序

文章来源: www.oschina.net,作者:Mhsjl,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/u/4204227/blog/3102822

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值