@PropertiesSource&ImportResource
前面说到过@ConfigurationProperties默认从全局配置文件获取值;
@PropertiesSource:加载指定的配置文件;
将application.properties配置文件内容注释掉;新建person.properties配置文件;
测试运行contextLoads;
说明获取到person.properties配置文件中的值;
@ImportResource:Spring的配置文件,让配置文件里面的内容生效;
还是在原来的代码基础上新建HelloService类,并创建beans.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="helloService" class="com.atguigu.springboot.service.HelloService"></bean>
</beans>
在test单元加入如下:
@Autowired
ApplicationContext ioc;
@Test
public void testHelloService(){
boolean b = ioc.containsBean("helloService");
System.out.println(b);
}
运行testHelloService;
运行结果表明SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件也不能自动识别;
想让Spring配置文件生效,加载进来:@ImportResource标注在一个配置类上;
//导入Spring的配置文件让其生效
@ImportResource(locations = {"classpath:beans.xml"})
接着运行testHelloService;
这样Spring配置文件就加载进来了;
在开发的时候我们很少给容器添加组件,写一个xml配置文件,然后将@ImportResource(locations = {“classpath:xxx.xml”})导入进来,
这样太麻烦了;我们采用SpringBoot推荐给容器中添加组件的方式。
SpringBoot推荐给容器中添加组件的方式:推荐使用全注解的方式
1.配置类======Spring配置文件
2.使用@Value给容器中添加组件
将配置类中的@ImportResource(locations = {“classpath:beans.xml”})注释掉,新建一个配置类MyAppConfig;
import com.atguigu.springboot.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
*
* 在配置文件中用<bean></bean>标签添加组件
*/
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService(){
System.out.println("配置类@Bean给容器中添加组件了...");
return new HelloService();
}
}
运行testHelloService;