文章目录
1. Spring Boot ComponentScan
Spring 框架通过解析属性的注解,自动把需要的 Bean 实例注入到属性中,加了@SpringBootApplication
注解的类是启动类,是整个系统的启动入口。Spring Boot框架会默认扫描启动类所在的包(fm.douban.app
),及其所有的子包进行解析,那么fm.douban.service
包就不会进行自动扫描,也不会自动实例化Bean
,而在 control 包中又使用了所需要的的Bean,则会报错。
解决办法:
为启动类的注解@SpringBootApplication
添加一个参数,告知系统需要额外扫描的包:
package fm.douban.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages={"fm.douban.app", "fm.douban.service"})
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class, args);
}
}
- 参数名是:
scanBasePackages
- 参数值是一个字符串数组,用于指定多个需要额外自动扫描的包,需要把包的前缀都写入
额外的知识点
对所有的 control 类使用了@RestController
的类,所有的方法不会渲染Thymeleaf
页面,都是返回数据,等同于在使用@Controller
的类的方法上添加@ResponseBody
注解
2. Spring Boot Logger 应用
在 Spring 系统中,使用日志来记录信息
步骤
2.1 配置
修改Spring Boot
系统的标准配置文件:application.properties
(在项目的src/main/resources/
目录下),这是一个固定位置,框架会自动加载并解析这个配置文件,增加日志级别配置:
logging.level.root=info
表示所有的日志(root)都为 info 级别
也可以为不同的包定义不同的级别
logging.level.fm.douban.app=info
表示fm.douban.app
包及其子包中的所有的类输出 info
级别的日志
2.1.1 常用的日志级别
优先级 | 级别 | 含义和作用 |
---|---|---|
最高 | ERROR | 错误信息日志 |
高 | WARN | 暂时不出错但高风险的警告信息日志 |
中 | INFO | 一般的提示语、普通数据等不紧要的信息日志 |
低 | DEBUG | 进开发阶段需要关注的调试信息日志 |
logging.level.root=error
意味着不输出更低优先级的 WARN、INFO、DEBUG 日志,只输出 ERROR 日志
logging.level.root=WARN
意味着不输出更低优先级的 INFO、DEBUG 日志,只输出 WARN 和 更高 优先级的 ERROR 日志。
2.2 编码
配置完成后,编码很简单,只需要实例化日志对象即可以打印日志了。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
@RestController
public class SongListControl {
private static final Logger LOG = LoggerFactory.getLogger(SongListControl.class);
@PostConstruct
public void init() {
LOG.info("SongListControl 启动啦");
}
}
先定义一个类变量LOG
,然后在LOG.info()
方法的参数中输入日志内容。这里的方法名与日志级别一一对应
3. Spring Boot Properties
配置文件的格式很简单,每一行:配置项名称=配置项值
logging.level.root=info
logging.level.fm.douban.app=info
3.1 自定义配置项
在application.properties
配置文件中加入自定义的配置项
song.name=God is a girl
框架会自动加载并自动解析整个文件
3.2 如何使用自定义配置项
import org.springframework.beans.factory.annotation.Value;
public class SongListControl {
@Value("${song.name}")
private String songName;
}
只需要使用@Value
注解即可,括号中的配置项名称,与配置文件中的保持一致。
项目在启动时,Spring 系统会自动把application.properties
配置文件中的 song.name 的值,赋值给 SongListControl 对象实例的 songName 变量。