参考:《深入浅出SpringBoot 2.x》

全注解的SpringBoot

用户可以通过注解将所需要的对象,存放到IOC容器中,然后SpringBoot可以根据这些需要使用的情况,自动注入到需要的Bean中。

Component 组件

如果你需要重复的使用一个类,而这个类又不属于业务,只是数据处理,那么就可以使用Component注解标记该类,然后使用ComponentScan即可将该类实例化到容器中。

ComponentScan就是一个扫描器,在SpringApplication中也带着一个这样的扫描器。有这种包含的扫描,那么又引出了ComponentScan注解中引出了excludeFilters属性,可以指定哪些类不被扫描器扫描到。

可以看下SpringBootApplication注解中,也使用了ComponentScan的注解,也就是SpringBoot应用的启动类同级的包,或者是类,默认会被扫描器扫描到。

在Configuration的类中,可以定义一些带@Bean注解的方法,这些方法的返回值,被加入到IOC容器中,如果不指定Bean的Name属性,那么将会使用该方法的方法名作为对象的名称存入到IOC容器中。

依赖注入

依赖注入,用的是多态来体现,一个对象,多种形态,然后用@Autowired给对象注入依赖,之后可以通过@Primary设置注入时候的容器中的实例的优先级和@Quelifier直接指定bean的名称。

这里我感觉还是很混乱,容器中的实例,一直没有个名称,一直说是用Bean装配到IOC容器中,这里其实已经理论混乱了。

Bean实例存放在容器之中,但Bean对应的实例有多种形态,也称之为Bean的依赖,Bean有多种依赖,所以需要进行选择,不然就会报错。所以注入的Bean的名称都是唯一的。

读取属性文件

@Value("${...}") 这样的占位符可以读取application.yml的的配置

还有一种读取的方法是用类来读取,

需要在类上加两个注解,Component,ConfgurationProperties("前缀名")

然后就可以读取指定的配置

例如: file.path = "/home/files"

@Component
@ConfigurationProperties("file")
@Data
public class Path(){
private String path;// = file.path
}

Bean的作用域

Bean可以直接设定其类型,不用的作用域会产生不同的Bean,或者相同的作用域,每次都会刷新。

所以可以使用@Scope注解给每个SpringBoot的组件指定在WEB中访问的范围。

@Profile

加载多套配置文件的注解。

一个很常见的例子,多个测试环境中有不同的数据库,在这里已经得到了答案。

可以通过Profile直接给指定的方法来指定。

本来我以为是用来同时加载不同的配置文件

书上讲的不是特别好,就是spring.profiles.active也可以指定其加载的文件

spring:
profiles:
active: dev

SpringEl

在@Value注解中使用El表达式,可以写一些简单的代码运算,或者代码的调用


@Value("${file.path}")
private String path; @Value("#{1+1}")
int a; @Value("#{T(System).currentTimeMillis()}")
private long time;
@Test
public void test(){
System.out.println(a);
System.out.println(time);
}

最新文章

  1. php结合md5的加密解密算法实例
  2. [Linux]Linux系统调用列表
  3. Python标准库——走马观花
  4. CSDN 自动评论
  5. jQuery mouseover与mouseenter,mouseout与mouseleave的区别
  6. myeclipse 右键 Add Struts... 页面报404 错误
  7. [LeetCode] Find Largest Value in Each Tree Row 找树每行最大的结点值
  8. Java多线程:线程间通信之volatile与sychronized
  9. java 判断是否为中文字符,部分,。中文符号不能识别
  10. Nikto主动扫描神器!!!
  11. 【学习总结】GirlsInAI ML-diary day-4:变量/Variable
  12. LuoGu P2783 有机化学之神偶尔会做作弊
  13. 容器启动脚本报错:exec user process caused "no such file or directory"
  14. JDK 1.8源码阅读 ArrayList
  15. Django ORM 操作 必知必会13条 单表查询
  16. WebView长按保存图片;WebView不跳转到系统的浏览器;WebView加载显示进度条;WebView返回事件处理;
  17. ORM之查询
  18. google map放大缩小地图去除 ctrl+,直接用鼠标放大缩小
  19. BZOJ1307: 玩具 单调队列
  20. .NET Core 和 .NET .Framework 速度比较

热门文章

  1. Django的简单使用
  2. MediatRPC - 基于MediatR和Quic通讯实现的RPC框架,比GRPC更简洁更低耦合,开源发布第一版
  3. 方法的重载(Overload)+ println重载
  4. tomcat下载安装&配置教程
  5. ubuntu undefined reference to
  6. golang面向对象
  7. Armv8之Execution State 和 Exception Level(一)
  8. 1. PyQt5开发环境的搭建
  9. 实践案例:平安健康的 Dubbo3 迁移历程总结
  10. .net6+wpf制作指定局域网ip无法上网的arp欺诈工具