一,简介
在我们springboot开发过程中会导入很多依赖,然后通过yml进行配置使用,这里面的根本原理是什么呢
依赖中的所有的@Component注解的类都是被IOC容器进行管理的,所以我们在导入这个依赖的时候,IOC容器会自动将依赖中的bean对象自动进行管理,并自动加载yml文件中所设置的属性值, 这样我们就可以方便的使用别人已经创建好的对象了
二,案例:
我自定义了两个依赖模块:commont模块和pojo模块,然后直接在模块service中进行使用
首先创建commont模块
首先导入依赖:
<!--当bean对象中使用@ConfigurationProperties加载属性的时候,让yml文件可以直接显示该bean的属性名--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>-
-
-
然后创建properteis包,并在该包中创建对象AA
在aa.java中:
@Component
@ConfigurationProperties(prefix = "aa") //这个是加载yml文件中的对象aa
@Data
public class AA {
private String name;
private String age;
}
-
-
-
-
然后你可以直接在该模块的yml中对这几个属性进行设置,当然你也可以不进行设置,让别人在使用该模块的时候,让别人进行设置
在yml中:
aa:
name: zhan
age:12
-
-
-
最后这个模块就配置完了,别人在导入的时候,就可以直接使用这个模块中的AA对象了
然后创建pojo模块,主要是和comment模块进行对比, 在不导入依赖以及不进行yml配置的时候会怎么样
首先这个模块我不导入spring-boot-configuration-processor依赖也没什么事情,只是别人在yml中进行配置的时候不方便而已
-
-
-
-
然后创建包properties,在包中创建一个对象BB
在BB.java中
@Component
@ConfigurationProperties(prefix = "bb")
@Data public class BB {
private String sex;
}
-
-
-
-
然后我在这个模块中不进行yml配置
-
-
-
-
最后这个pojo模块就设置完了,别人在导入的时候,就可以直接使用这个模块中的BB对象了
最后在service模块中
首先我分别导入commont模块和pojo模块依赖
-
-
-
-
a)不进行yml配置直接使用的情况:
在AAController中直接导入依赖中的对象进行使用:
在AAController中
public class AAController{
@Resource
private AA aa;
@Resource
private BB bb;
@GetMapping("/aa")
public String aa(){
System.out.println(aa.toString() ) //这个结果为{name:zhan,age:12}
//因为我已经在commont模块中的yml中配置了对应的属性值
System.out.println(bb); //打印结果为null,
//我并没有在pojo模块中配置对应的属性值
return "成功";
}
}
-
-
-
-
-
-
-
-
-
-
-
bb)先进行yml配置,再使用对象的情况
首先在yml中
aa: //当你输入aa的时候,它会自动提示内部的两个属性名,这就是使用依赖的好处
//在它的提示中会显示aa.name=zhan, aa.age=12, 表示这两个属性有默认值
//你设置的话当然是以你设置的值为主
name: fang
age:15
bb: //当你输入bb的时候,它不会给你提示,这样很不方便,这就是没有使用依赖的坏处
sex: nan
-
-
-
-
然后在BBController.java中
public class BBController{
@Resource
private AA aa;
@Resource
private BB bb;
@GetMapping("/bb")
public String aa(){
System.out.println(aa.toString() ) //这个结果为{name:fang,age:15}
//因为我已经在commont模块中的yml中配置了对应的属性值
System.out.println(bb.toString); //打印结果为{sex: nan"
return "成功";
}
}
-
现在你该知道该如何自定义模块进行使用了吧,哈哈