本篇内容介绍了“SpringBoot注入数据的方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
application.properties
boot.name=liqingfeng boot.age=28 boot.pswd=123456
@RunWith(SpringRunner.class) @SpringBootTest public class DemoApplicationTests { @Value("${boot.name}") private String name; @Value("${boot.pswd}") private Integer pswd; @Value("${boot.age}") private Integer age; }
@Component @ConfigurationProperties(prefix = "boot") @Data public class User { private String name; private Integer age; private Integer pswd; }
@Autowired private Environment env; @RunWith(SpringRunner.class) @SpringBootTest public class DemoApplicationTests { @Autowired private Environment env; @Test public void contextLoads() { System.out.println("名字:" + env.getProperty("boot.name")+ "年龄:" + env.getProperty("boot.age") +"密码:" + env.getProperty("boot.pswd")); } }
@Value("注入普通字符串") private String normal; //关于属性的KEY可以查看System类说明 @Value("#{systemProperties['java.version']}")//-->使用了SpEL表达式 private String systemPropertiesName; // 注入操作系统属性 @Value("#{T(java.lang.Math).random()*80}")//获取随机数 private double randomNumber; //注入表达式结果 @Value("#{1+2}") private double sum; //注入表达式结果 1+2的求和 @Value("classpath:os.yaml") private Resource resourceFile; // 注入文件资源 @Value("http://www.baidu.com") private Resource testUrl; // 注入URL资源 @Value("#{st.name}") private String studentName;
#{...}和${...}的区别演示 A.${…}的用法 {}里面的内容必须符合SpEL表达式,通过@Value(“${app.name}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value("${app.name:胖先森}") // 如果属性文件没有app.name,则会报错 // @Value("${app.name}") // private String name; // 使用app.name设置值,如果不存在则使用默认值 @Value("${app.name:胖先森}") private String name; B.#{...}的用法 // SpEL:调用字符串Hello World的concat方法 @Value("#{'Hello World'.concat('!')}") private String helloWorld; // SpEL: 调用字符串的getBytes方法,然后调用length属性 @Value("#{'Hello World'.bytes.length}") private String helloWorldbytes; C.#{...}和${...}混合使用 ${...}和#{...}可以混合使用,如下文代码执行顺序:通过${server.name}从属性文件中获取值并进行替换,然后就变成了 执行SpEL表达式{‘server1,server2,server3’.split(‘,’)}。 // SpEL: 传入一个字符串,根据","切分后插入列表中, #{}和${}配置使用(注意单引号,注意不能反过来${}在外面,#{}在里面) @Value("#{'${server.name}'.split(',')}") private List<String> servers; 在上文中在#{}外面,${}在里面可以执行成功,那么反过来是否可以呢${}在外面,#{}在里面,如代码 // SpEL: 注意不能反过来${}在外面,#{}在里面,这个会执行失败 @Value("${#{'HelloWorld'.concat('_')}}") private List<String> servers2; 答案是不能。 因为spring执行${}是时机要早于#{}。 在本例中,Spring会尝试从属性中查找#{‘HelloWorld’.concat(‘_’)},那么肯定找到,由上文已知如果找不到,然后报错。所以${}在外面,#{}在里面是非法操作 D.用法总结 #{…} 用于执行SpEl表达式,并将内容赋值给属性 ${…} 主要用于加载外部属性文件中的值 #{…} 和${…} 可以混合使用,但是必须#{}外面,${}在里面
${random.value}、${random.int}、${random.long} ${random.int(10)}、${random.int[1024,65536]}
关于数据校验的部分代码
@Component @ConfigurationProperties(prefix = "person") @Validated public class Person { //lastName必须是邮箱格式 @Email private String lastName;
“SpringBoot注入数据的方式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。