@PropertySource

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

什么意思呢??? 下面,代码举例

我在reources中在创建一个person.yml,把之前的application.yml里面的内容删除

person.yml

person:
  lastName: hello
  age: 18
  boss: false
  birth: 2017/12/12
  maps: {k1: v1,k2: 12}
  lists:
    - lisi
    - zhaoliu
  dog:
    name: 小狗

回到Person类中,加入@PropertySource此注解,来指定你要加载的配置文件

@Component
@PropertySource("classpath:person.yml", encoding = "UTF-8")
@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;
    ...
    ...
 }

运行一波,同样也像配置全局文件一样得到相同的效果,如何配置全局文件?? 看这里

pom distributionManagement 多个snapshotRepository_xml

????全为null
原来,@PropertySource此注解默认只对properties文件可以进行加载,但l不能支持yml或者yaml
所以,需创建person.properties

person.properties

person.lastName=李四
person.age=22

偷波懒。。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdo7up9k-1596175265290)(en-resource://database/592:1)]
OK, 毛有问题

@ImportResource

@ImportResource的作用:导入Spring的配置文件,让配置文件里面的内容生效,而且,Spring Boot里面没有Spring的配置文件,要想导入我们自己编写的配置文件,也得加上这个注解,并不像SSM那样直接@Autowired就可以直接导入配置文件

譬如,创建一个Hello类

public class Hello {
}

在创建一个bean.xml

bean.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="hello" class="com.nsx.springboot7.pojo.Hello"/>
</beans>

如下我们测试容器中有没有这个bean

@SpringBootTest
class Springboot7ApplicationTests {

    @Autowired
    Person person;

    @Autowired
    ApplicationContext applicationContext;

    @Test
    void hasHello() {
        Boolean b = applicationContext.containsBean("hello");
        System.out.println(b);
    }
 }

输出一个false
我们再启动类上加入@ImportResource

@ImportResource(locations = "classpath:bean.xml")
@SpringBootApplication
public class Springboot7Application {

    public static void main(String[] args) {
        SpringApplication.run(Springboot7Application.class, args);
    }

}

pom distributionManagement 多个snapshotRepository_spring_02

perfect !!!

但是,你不觉得这样子给容器中添加组件很麻烦吗,又要加@ImportResource,又要写 .xml 文件,如果配置多个组件,真的麻烦,那么引入新的注解@Bean

@Bean

SpringBoot推荐给容器中添加组件的方式是使用全注解的方式,具体操作如下:

  1. 配置类@Configuration------>Spring配置文件
  2. 使用@Bean给容器中添加组件

譬如,创建一个Myconfig全局配置类

@Configuration
public class Myconfig {
    @Bean
    public Hello hello() {
        System.out.println("Hello类加载过来咯");
        return new Hello();
    }
}

什么意思呢??
@Configuration的作用:指明当前类是一个配置类,就是来替代之前的Spring配置文件
@Bean的作用:将方法的返回值(即Hello)添加到容器中,容器中这个组件默认的id就是方法名(即hello)

然后,我们测试一波,但测试之前得把之前配置的@ImportResource和bean.xml删掉

pom distributionManagement 多个snapshotRepository_配置文件_03

ok,木有问题

项目最终的创建

pom distributionManagement 多个snapshotRepository_spring_04