Spring Boot 学习笔记 – 代码结构
14.代码结构
Spring Boot
没有要求必须是某种代码结构,但是有一些最佳的实践。
14.1 使用默认包
当一个类没有包含package
定义就表示在一个默认包中。使用默认的包通常是不好的,应该避免。它在 Spring Boot
应用程序中在使用@ComponentScan
,@EntityScan
或者是@ SpirngBootApplicaiton
注解会发生特定的问题.因为任何一个 jar 中的类都会被加载.
我们推荐你沿用 Java 推荐的包命名规范,使用反向的域名名称(举个例子,com.example.project).
14.2 定位主程序类
我们通常建议你将主程序类放在高于其他类的顶层包下.@EnableAutoConfiguration
注解通常放在你的主0.类上,并且它明确的定义了一个基础的”搜索包”用户扫描某些项.举个例子,如果你写的是一个 JPA应用程序,这个带有@EnableAutoCOnfiguration
注解的类用于搜索@Enitty
项目.
使用一个顶层包路径同样允许@ComponentScan
不配置basePackage
属性. 你可以配置@SpringBootApplication
注解在你的放在顶层包主类上.
这是一个典型的结构:
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
这个Application.java
文件将定义 main 方法,在类上加上@Configuration
注解
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
15.配置类
Spring Boot 偏向于使用基于 java 代码的配置,虽然可以调用SpringApplication.run()
基于 XML 配置文件,我们通常推荐主要来源是一个@Configuration
类.通常一个定义一个main
方法的类同样是一个好的.
许多网络上的 Spring 配置示例代码使用 XML 配置.永远尽可能的尝试使用同等的 java 代码配置.搜索enable
开头的注解可以好的开始.
###15.1 引入附加的配置类
你不用必须将所有的@Configuration
放在一个单独的类里.@Import
注解可以用于引入一个附加的配置类.无论如何,你可以使用@ComponentScan
去自动的收集所有的 Spring 组件,包括了有@Configuration
注解的类.
###15.2 引入 XML 配置
如果你无论如何必须使用 XML 的配置文件,我们建议你仍然开始于一个@Configuration
类.你可以使用一个附加@ImportResource
注解去加载 XML 配置文件.
##16. 自动配置
Spring Boot 自动配置尝试基于jar 的依赖关系自动配置 Spring 应用.举个例子,如果HSQLDB
在classpath
,并且你没有手动配置任何数据库连接 bean
, 自动配置将会配置一个内存数据库.
你需要配置@EnableAutoConfiguration
或者@SpringBootApplication
注解在你的一个@Configuration
类上.
你应该总是仅仅添加一个@EnableAutoConfigration
注解.我们通常建议你添加到主要的@Configuraiton
类上.
###16.1 逐步取代自动配置
自动配置是非侵入式的,在任何时候你可以定义自己的配置替换自动配置的特定部分.举个例子,如果你添加自己的DataSource
bean, 则默认内置的数据库支持将不会被使用.
如果你需要找出自动配置目前起到了哪些作用和为什么,启动应用的时候添加--debug
即可.这将启动 核心日志和自动配置报告 debug 日志输出到控制台.
###16.2 禁用特定的自动配置
如果特定的自动配置类不是你想要的,你可以使用@EnableAutoConfiguration
的排除属性exclude
禁用.
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
如果这个类不在classpath
,你可以使用excludeName
属性指定完整的名称起到相同的作用.最后,也可以通过spring.autoconfigure.exclude
属性控制一个列表,控制自动配置的排除项.
你可以定义排除项同时使用两种方式.
相关文章
- EasyCVR对接华为iVS订阅摄像机和用户变更请求接口介绍
- 精选 | 腾讯云CDN内容加速场景有哪些?
- 模块化网络防止基于模型的多任务强化学习中的灾难性干扰
- 用搜索和注意力学习稳健的调度方法
- 用于多变量时间序列异常检测的学习图神经网络
- 助力政企自动化自然生长,华为WeAutomate RPA是怎么做到的?
- 使用腾讯轻量云搭建Fiora聊天室
- TSRC安全测试规范
- 云计算“功守道”
- 助力成本优化,腾讯全场景在离线混部系统Caelus正式开源
- Flink 利器:开源平台 StreamX 简介
- 腾讯云实践 | 一图揭秘腾讯碳中和?解决方案
- 深度学习中的轻量级网络架构总结与代码实现
- 信息系统项目管理师(高项复习笔记三)
- Adobe国际认证让科技赋能时尚
- c++该怎么学习(面试吃土记)
- 面试官问发布订阅模式是在问什么?
- 面试官:请实现一个通用函数把 callback 转成 promise
- 空中悬停、翻滚转身、成功着陆,我用强化学习「回收」了SpaceX的火箭
- 中山大学林倞解读视觉语义理解新趋势:从表达学习到知识及因果融合