我们本章来讲一下这两个注解:
@PropertySource
@ImportResource
在Spring Boot中,默认是会加载application.properties和application.yml文件中的数据。但是如果我们放实体类中的属性值,不想写到这个全局的配置文件中,我们要怎么办?这个时候@PropertySource这个注解就发挥作用了,我们可以自己指定哪个文件作为我们的配置文件。
实体类:
文件路径:
如果大家还不清楚classpath是什么意思,我在这里介绍一下:
在网上有很多人说classpath是指WEB-INF/classes,一开始我也以为是,因为在运行的过程中,这些java和资源文件都会被编译转变为class文件和相应格式的文件,都会放到一个统一的文件夹中,而这个PropertySource就是把这个路径赋予,让系统知道想要找的文件在那个目录(在运行程序后,它并不是直接运行的java文件,而是要经过编译,编译后的文件会放到其他地方,所以不会直接在项目原来路径中搜寻相应的文件,这个大家要知道)。
但是后面我我发现在这个目录并没有相关的class文件信息,经过各种查询才了解了,在我们的项目中,有一个.classpath文件。
我们打开它看一下。(博主用的是NotePad++打开的)
在classpathentry里有一个输出位置output="target/classes",我们找一下,果然在项目中有这么一个target文件夹。
我们点进去。
会发现有相关的classes和test-classes文件夹,分别存放了相应的class文件,我们打开classes文件夹来看看里面的内容。
果然,java文件和相应资源目录中的文件都存放在此处。
这个才是真正的classpath的路径位置。
好的,回到主题,我们设置好了路径,我们运行一下程序。
正是我们在config.properties中赋予的属性值。这就说明了@PropertySource起作用了,可以自主的指定配置文件,但是@PropertySource只能指定.properties文件不能指定.yml文件,有兴趣的童鞋可以自行去尝试一下。
我们说过Spring Boot是自动装配的。也就是说Spring等配置文件,会默认给Spring Boot自动配置好。那么如果我们想要自己编写Spring等配置文件,Spring Boot会识别吗?
我们来写一个Spring的配置文件试试吧:
在资源目录中,我们右键new,Other,然后输入bean,找到如上图所示的位置,我这里取名为spring.xml。
然后创建package和相应的java文件,如上图所示。
我们在spring.xml文件中填入如下信息,就像我们之前配置一样。(不用Spring Boot前)
好的,我们配置好了,我们现在来测试下,能不能从Spring容器中拿到这个bean,如果拿到了就说明可以识别。
在测试类中,我们添加ApplicationContext,这个Spring的上下文对象。然后重新写一个测试方法,从context中拿我们放进去的bean,然后打印这个对象。(我们StudentService类中不需要写任何东西,但是对象也会打印相应的值)
我们看看相应的测试结果,果然是报错了,没有这个名字叫做studentService的bean,所以Spring Boot默认不会识别。那么怎么让它识别呢?答案是使用@ImportResource。在哪里使用呢?答案是Spring Boot的主程序啦。
好的,我们现在添加好了,再次运行看看结果。
绿啦绿啦!
相关的对象值也打印出来啦!
手写Spring配置文件有两种方式,一种是通过xml配置文件,我们刚刚试过了;另一种是通过注解的方式配置。
我们推荐采用注解的方式,而不推荐使用xml文件进行配置。Spring的官网也是推荐注解方式哩。
那么怎么使用注解的方式进行配置呢?下章告诉你。
关注博主,更多精彩哦!
上一章:从零开始的Spring Boot学习【六】【通过@Value方式注入】
下一章:从零开始的Spring Boot学习【八】【配置类和占位符表达式】