首页 > 技术文章 > @PropertySource注解 和 @ImportSource注解 与@ Configuration注解 和 @Bean注解 及 SpringBoot的配置文件讲解

sensenh 2021-07-27 16:36 原文

I.@PropertySource注解:

  用来指定加载的配置文件,比如我们经常用@ConfigurationProperties注解来告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定以达到给属性赋值的目的,但是,@ConfigurationProperties这个注解它默认是从全局配置文件application.properties中去获取值的,这样一来当全局配置文件application.properties中配置的内容很多时,就很不方便,所以强烈推荐可以为本类中的所有属性新建一个配置文件(非全局配置文件application.properties),然后用@PropertySource注解来指定该配置文件,以达到为该类中所有属性赋值的目的。

  eg:@PropertySource (value = {"classpath:person.properties"})

       public class Person{

    .......

 

 

II.@ImportSource注解:

  用来导入spring的配置文件,让配置文件里面的内容生效。因为SpringBoot里面没有Spring的配置文件,所以我们自己编写的配置文件,也不能自动识别,想让Spring的配置文件生效加载进来,就用@ImportResource标注在一个配置类上。

  eg:  @ImportResource ( locations = {"classpath : beans.xml"} )

               ......

 

==========================================================================================

 

 ||^_^|||&   事实上SpringBoot更加推荐我们使用全注解的方式给容器添加组件

即:将配置类作为Spring的配置文件(使用@Bean注解给容器中添加组件)

 

I. @Configuration注解:指明当前类是一个配置类,就是来替代之前的Spring配置文件(之前在配置文件中用<bean><bean/>标签来添加组件)。

 

II.@Bean注解:Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。Spring只会调用一次,将这个Bean对象放在自己的IOC容器中。通俗的讲就是在服务启动时,实例化一个对象放到ioc容器中,在需要初始化的实例,方法,内容时使用。作用:将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名,@Bean注解对应bean标签,@Value注解对应value属性,他们都有内在联系的,懂的都懂。

 

eg:一个小例子使用@Bean给容器中加组件。

1.config配置类:

 

@Configuration
public class MyAppConfig { //用来替代Spring配置文件

//要做的:将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
@Bean //@Bean注解对应bean标签,@Value注解对应value属性,他们都有内在联系的,懂的都懂。
public HelloService helloService(){ //HelloService添加到容器中,容器中这个组件的名字就是helloService
System.out.println("配置类@Bean给容器中添加组件了...");
return new HelloService(); //返回这个HelloService
}
}

 

2.service组件:

 

public class HelloService {
}

 

3.SpringBoot测试类:

@SpringBootTest
class Springboot02ConfigApplicationTests {

@Autowired
Person person;

@Autowired
ApplicationContext ioc;

@Test
public void contextLoads() {
System.out.println(person);
}

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

结果:

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


 

推荐阅读