13.SpringBoot学习笔记

\@PropertySource、\@ImportResource和\@Bean

Posted by Chen Xingxu on June 20, 2020

SpringBoot学习笔记(十三)–@PropertySource、@ImportResource和@Bean

@PropertySource

作用:加载指定的配置文件

创建一个 person.properties

person.last-name=大明
person.age=18
person.birth=2020/6/6
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=小狗
person.dog.age=3

在 javaBean 中添加 @PropertySource(value = {“classpath:person.properties”})

package demo.yangxu.springboot.bean;
//value可以写成数组的形式,加载多个外部值
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix="person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

运行测试类,结果如下

Person{lastName='大明', age=18, boss=false, birth=Sat Jun 06 00:00:00 CST 2020, maps={k1=v1, k2=14}, lists=[a, b, c], dog=Dog{name='小狗', age=3}}

@ImportResource

导入 Spring 的配置文件,让配置文件中的内容生效。Spring Boot 中没有 Spring 的配置文件,而自己编写的配置文件不能被自动识别。若要使 Spring 的配置文件加载且生效,需要将 @ImportResource 标注在一个配置类上。

创建一个 HelloService

package demo.yangxu.springboot.service;
public class 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="demo.yangxu.springboot.service.HelloService"></bean>
</beans>

在程序启动类上添加注解 @ImportResource

package demo.yangxu.springboot;
@ImportResource(value = {"classpath:beans.xml"})
@SpringBootApplication
public class Springboot02ConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(Springboot02ConfigApplication.class, args);
    }
}

在测试类中编写测试方法

package demo.yangxu.springboot;

@SpringBootTest
class Springboot02ConfigApplicationTests {
    @Autowired
    ApplicationContext ioc;

    @Test
    public void testHelloService(){
        boolean containsBean = ioc.containsBean("helloService");
        System.out.println(containsBean);
    }
}

测试结果为:true

@Bean

Spring Boot 不推荐编写 Spring 的配置文件,而是推荐使用全注解的方式,给容器中添加组件。

1、配置类 @Configuration –> Spring 配置文件

package demo.yangxu.springboot.config;
/**
 * @Configuration:指明当前类是一个配置类,替代之前的Spring配置文件
 */
@Configuration
public class MyAppConfig {}

2、使用 @Bean 给容器中添加组件

package demo.yangxu.springboot.config;

/**
 * @Configuration:指明当前类是一个配置类,替代之前的Spring配置文件
 */
@Configuration
public class MyAppConfig {
    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    //此处的id为helloService02
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean向容器中添加了组件");
        return new HelloService();
    }
}

3、编写测试类方法

@Test
public void testHelloService(){
    boolean containsBean = ioc.containsBean("helloService02");
    System.out.println(containsBean);
}

测试结果为

配置类@Bean向容器中添加了组件
true