1、@PropertySource :加载指定的配置文件
SpringBoot推荐给容器中加入组件的方式,推荐使用全注解的方式:
1、配置类==代替=>配置文件beans.xml
2、使用@Bean给容器中添加组件
//@ImportResource :导入Spring的配置文件,让配置文件里面的内容生效
2、
resources下新建person.properties
person.last-name=李四 person.age=12 person.birth=2017/12/15 person.boss=false person.maps.k1=v1 person.maps..k2=14 person.lists=a,b,c person.dog.name=dog person.dog.age=15
并注释掉application.properties中的person对象配置
修改Person.java
package com.cnstrong.springboot.bean; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Email; import java.util.Date; import java.util.List; import java.util.Map; /** * 将配置文件中配置的每一个属性的值映射到这个组件中 * @ConfigurationProperties : 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 * prefix = "",配置文件中哪个下面的所有属性进行一一映射,默认从全局配置文件中获取值 */ @PropertySource(value = {"classpath:person.properties"}) //只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能 @Component @ConfigurationProperties(prefix = "person") @Validated public class Person { /** ** */ //@Value("${person.last-name}") //@Email //lastName必须是邮箱格式的 private String lastName; //@Value("#{11*2}") private Integer age; //@Value("true") private Boolean boss; private Date birth; private Map* maps; private List
运行test包SpringBoot01HelloworldQuickApplicationTests类下的contextLoads方法
3、Spring Boot里面没有Spring的配置文件,自己编写的配置文件也不能自动识别;
想让Spring的配置文件生效加载进来需要用@ImportResource标注在一个配置类上
新建service包HelloService类
package com.cnstrong.springboot.service; public class HelloService { } resources目录下新建beans.xml
修改SpringBoot01HelloworldQuickApplicationTests测试类
package com.cnstrong.springboot; import com.cnstrong.springboot.bean.Person; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; import org.springframework.test.context.junit4.SpringRunner; /** * Springboot单元测试 * 可以在测试期间很方便的类似编码一样进行自动注入等容器的功能 */ @RunWith(SpringRunner.class) @SpringBootTest public class SpringBoot01HelloworldQuickApplicationTests { @Autowired Person person; @Autowired ApplicationContext ioc; @Test public void testHelloService(){ boolean b = ioc.containsBean("helloService"); System.out.println(b); } @Test public void contextLoads() { System.out.println(person); } } 运行testHelloService方法,发现
主类SpringBoot01HelloworldQuickApplication中加入@ImportResource配置
package com.cnstrong.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @ImportResource(locations = {"classpath:beans.xml"}) //导入Spring的配置文件让其生效 @SpringBootApplication public class SpringBoot01HelloworldQuickApplication { public static void main(String[] args) { SpringApplication.run(SpringBoot01HelloworldQuickApplication.class, args); } } 重新运行testHelloService方法
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SpringBoot推荐给容器中加入组件的方式,推荐使用全注解的方式:
1、配置类==代替=>配置文件beans.xml
2、使用@Bean给容器中添加组件
将配置类SpringBoot01HelloworldQuickApplication中的@ImportResource(locations = {"classpath:beans.xml"})注释掉
不编写spring的配置文件beans.xml
新建config包MyAppConfig类
package com.cnstrong.springboot.config; import com.cnstrong.springboot.service.HelloService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Configuration : 指明当前类是一个配置类,就是来替代spring的配置文件 * 在配置文件中用标签添加组件 */ @Configuration public class MyAppConfig { @Bean //将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名 public HelloService helloService(){ System.out.println("配置类@Bean给容器中添加组件了"); return new HelloService(); } }
运行测试类SpringBoot01HelloworldQuickApplicationTests的testHelloService方法