springboot @Value 教程

叙述

在使用spring框架的项目中,@Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中,我们常用的功能相对简单。本文使您系统地了解@Value的用法。

(1)@Value("${}"):可以获取对应属性文件中定义的属性值。

(2)@Value("#{}"):表示 SpEl 表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法。

可以注入以下资源:

  1. 注入普通字符串
  2. 注入操作系统属性
  3. 注入表达式结果
  4. 注入其他bean属性
  5. 注入URL资源

一般YML用法

注入普通字符串

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    // 直接将字符串赋值给 str 属性
    @Value("hello world")
    private String str;


    @Test
    public  void  getValue(){

        System.out.println(str);
    }

}

注入操作系统属性

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    @Value("#{systemProperties['os.name']}")
    private String osName; // 结果:Windows 10

    @Test
    public  void  getValue(){

        System.out.println(osName);
    }
}

注入表达式结果

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    // 生成一个随机数
    @Value("#{ T(java.lang.Math).random() * 1000.0 }")
    private double randomNumber;

    @Test
    public  void  getValue(){

        System.out.println(randomNumber);
    }
}

注入其他bean属性

package cn.wideth.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

//其他bean,自定义名称为 myBeans
@Component("myBeans")
public class OtherBean {

    @Value("OtherBean的NAME属性")
    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    @Value("#{myBeans.name}")
    private String fromAnotherBean;

    @Test
    public  void  getValue(){

        System.out.println(fromAnotherBean);
    }
}

注入URL资源

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import java.net.URL;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    /**
     *注入 URL 资源
     */
    @Value("https://www.baidu.com/")
    private URL homePage;

    @Test
    public  void  getValue(){

        System.out.println(homePage);
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是 SpringBoot 使用 Caffeine 的教程: 1. 引入依赖 在 pom.xml 文件中引入 Caffeine 依赖: ```xml <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.9.0</version> </dependency> ``` 2. 配置 Caffeine 缓存 在 SpringBoot 的配置文件中添加以下配置: ```yaml spring.cache.type=caffeine spring.cache.caffeine.spec=maximumSize=100,expireAfterAccess=5m ``` 这里使用了 maximumSize 和 expireAfterAccess 两个参数,maximumSize 表示缓存的最大容量为 100,expireAfterAccess 表示对象的访问时间超过 5 分钟后会被删除。 3. 使用缓存 在 Java 代码中使用缓存,需要使用 SpringBoot 提供的 @Cacheable、@CachePut、@CacheEvict 注解。 例如,以下代码演示了如何使用 @Cacheable 注解: ```java @Service public class UserService { @Cacheable(value = "userCache", key = "#id") public User getUserById(Long id) { // 从数据库中获取用户信息 User user = userDao.getUserById(id); return user; } } ``` 这里定义了一个缓存名为 userCache,并且根据 id 作为缓存的 key 值。 4. 测试缓存 在测试类中进行测试: ```java @SpringBootTest class UserServiceTest { @Autowired private UserService userService; @Test void testCache() { // 第一次查询,从数据库中获取用户信息 User user1 = userService.getUserById(1L); System.out.println(user1); // 第二次查询,从缓存中获取用户信息 User user2 = userService.getUserById(1L); System.out.println(user2); } } ``` 这里定义了一个测试用例,第一次查询会从数据库中获取用户信息,第二次查询会从缓存中获取用户信息。 以上就是 SpringBoot 使用 Caffeine 缓存的教程,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值