我们先把在主程序中引入spring.xml的注解先注释掉。
接下来我们尝试使用注解的方式进行配置,而不是xml文件的格式。
注解的形式:
第一:写一个类,配置类
第二:添加@Configuration和@Bean
我们先创建一个新的package,区分于其他类型的package,然后在里面创建一个Class。
我们打算把这个新建的类当作配置类,让它等价于spring.xml。
在spring.xml中,在标签<beans>中,我们是可以在里面写上很多的<bean>标签的。
同样,spring.xml能做的事情,我们配置类肯定也可以啊。要想取代一个产品,那么这个产品最基本的就是要有原来产品的功能(甚至更优越)。
配置类(注解方式):
xml方式:
我们需要在配置类上添加@Configuration,代表它是一个配置类,我们之前讲过。然后在方法上方添加@Bean,等价于xml方式中的<bean></bean>。而我们方法的名字getStudent就等价于<bean>中的id,return stuService就等价于<bean>中填写的class。
口说无凭,我们来测试一下。
在上章我们写的test()方法中,因为id为方法名,所以我们getBean方法中填写的字符串也要做相应的修改,改成我们的方法名getStudent,然后进行测试。
好了,答应出StudentService对象的相关信息,代表我们的配置没有问题。
在Service层我们通常是需要引入Dao层的,而在spring.xml中写<bean>的时候,我们通常需要写上属性标签。
就像这样:(以下做一个假设)
//spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="studentService" class="com.example.demo.service.StudentService">
<property name="studentDao" ref="studentDao"></property>
</bean>
<bean id="studentDao" class="com.example.demo.dao.StudentDao">
</bean>
</beans>
在StudentService中引入了dao层我们就需要做一个映射,ref="studentDao",然后在下方还要写上dao层的bean。这样做很麻烦耶。在Spring Boot中我们使用注解的方式就非常的方便了。
就像这样:
//配置类(等价于spring.xml)
@Configuration
public class ConfigTest {
@Bean
public StudentService getStudent() {
StudentService stuService = new StudentService();
StudentDao stuDao = new StudentDao();
//如果StudentService中做了设置dao层的方法
stuService.setStudentDao(stuDao);
return stuService;//返回值<bean class="...">
//返回值中就会自带上dao层的数据了
}
}
好了,注解写配置类告一段落先,我们的注意力回到默认的全局配置文件上(application.properties和application.yml)。
我们来介绍以下占位符表达式。
${random.uuid}:uuid
${random.value}:随机字符串
${random.int}:随机整型数
${random.long}:随机长整型数
${random.int(10)}:10以内的整型数
${random.int[1024,65536]}:指定随机数范围
这些是啥?怎么用的啊?我们来举一个例子。
大家还记得entity中有一个Student的实体类把,我们拿age属性来举个例子,先把我们之前自己指定的配置文件的注解注释掉,@Value也注释掉,这样子,它就默认是使用的application.properties配置文件了。然后我们回到application.properties中。
例如我们写上${random.int}吧,然后测试一下。
可以发现age的值是一个随机数,符合我们的介绍,我们再试试其他的,这次我们在yml配置文件中尝试一下。
我们这次来试一个随机字符串,我们测试运行一下,看看结果。
的的确确是一个随机字符串。除了这些随机数外,我们还有不是随机数的,例如在第一个配置文件中引用第二个配置文件中的值。
我们在application.properties中随便写一个key,然后value对应abc,然后我们尝试在yml中引用这个值。
如上图所示,然后我们运行测试看一下结果。
是没有问题的,就是说我们可以在两个配置文件中相互引用,也就变相证明这两个配置文件是相互互补的。
我们现在更改为student.a.b2,但是在.properties中不做任何的修改,看看会发生什么,我们测试运行。
配置文件没有识别到对应的key和value,所以把它当作一个字符串去输出了。(有没有人刚开始阅读是以为它会报错还是name会显示为null,被骗了吧)
下一章讲一下Spring Boot的多环境配置以及切换。
上一章:从零开始的Spring Boot学习【七】【@PropertySource和@ImportResource】
下一章:从零开始的Spring Boot学习【九】【多环境设置以及切换】