SpringBoot注入数据的方式是什么

本篇内容介绍了“SpringBoot注入数据的方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

汉源网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联建站于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

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]}
@Value获取值和@ConfigurationProperties获取值比较

SpringBoot注入数据的方式是什么

关于数据校验的部分代码

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
   //lastName必须是邮箱格式
    @Email
    private String lastName;

“SpringBoot注入数据的方式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!

网页题目:SpringBoot注入数据的方式是什么
路径分享:https://www.cdcxhl.com/article16/gecgdg.html

成都网站建设公司_创新互联,为您提供网站导航定制开发品牌网站制作外贸建站自适应网站网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站建设