【SpringBoot】SpringBoot 配置这一篇文章就够了 (2)

其它配置和上方一致,只看一下javabean的改变

package com.slp.springboot02config.bean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; @Component public class PersonNew { /** * <bean> * <propertu value="sang"></propertu> * </bean> * person.last-name :对应的是配置文件中的名称 */ @Value("person.last-name") private String lastName; @Value("#{11*2}") private int age; @Value("true") private Boolean boss; private List<Object> lists; private Map<String,Object> maps; private Dog dog; public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Boolean getBoss() { return boss; } public void setBoss(Boolean boss) { this.boss = boss; } public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } } 五、@Value和@ConfigurationProperties注入的区别 @ConfigurationProperties @Value
功能   批量注入配置文件中的属性   一个个指定  
松散绑定   支持   不支持  
SPEL   不支持   支持  
JSR303数据校验   支持   不支持  
//JSR303校验 @Component @ConfigurationProperties(prefix = "personval") @Validated public class PersonValidate { @Email private String lastName; }

需要添加jar包

<!--jsr3参数校验器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> 六、@PropertySource&@ImportResource 1.@PropertySource

加载指定配置文件

package com.slp.springboot02config.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; @PropertySource(value = {"classpath:person.properties"}) @Component @ConfigurationProperties(prefix = "personsource") public class PersonPropertySource { private String lastName; public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Override public String toString() { return "PersonPropertySource{" + "lastName='" + lastName + '\'' + '}'; } }

person.properties

personsource.lastName=sang

测试结果

PersonPropertySource{lastName='sang'} 2.@ImportResource

导入Spring的配置文件,让配置文件中的内容生效

新建一个spring的配置文件,内容如下

<?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 "> <bean></bean> </beans>

测试Spring容器是否包含这个bean

package com.slp.springboot02config; import com.slp.springboot02config.bean.Person; import com.slp.springboot02config.bean.PersonPropertySource; import org.junit.jupiter.api.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; /** * 可以在测试期间自动注入 * RunWith 指定使用Spring处理器而不是junit */ @RunWith(SpringRunner.class) @SpringBootTest class SpringBoot02ConfigApplicationTests { @Autowired Person person; @Autowired PersonPropertySource personPropertySource; @Autowired ApplicationContext ioc ; @Test void contextLoads() { System.out.println(ioc.containsBean("helloService")); } }

输出结果为false,说明此时里面还没有这个bean,说明自己编写的配置文件不能自动识别,想让Spring的配置文件生效,加载进来,需要将@ImportResource标注在主配置类上,修改启动类内容为如下

@ImportResource(locations = {"classpath:beans.xml"}) @SpringBootApplication public class SpringBoot02ConfigApplication { public static void main(String[] args) { SpringApplication.run(SpringBoot02ConfigApplication.class, args); } }

再进行测试则会输出true,说明加载成功。

但是这样会很麻烦,加一个就要修改一下,SpringBoot推荐给容器中添加组件的方式:使用全注解的方式(@Bean)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyypjj.html