@AllArgsConstructor与@Value共同使用引发的报错问题

平时我们用lombok的方式来实现Bean的构造函数方式的注入,但是当遇到@Value注解的时候,就会出现问题,看下面这段代码:

@RestController
@AllArgsConstructor
@RequestMapping("test")
public class TestController {

    @Value("${test}")
    private String test;

    private TestService testService;

    @GetMapping()
    public String get() {
        System.out.println(test);
        return testService.get();
    }
}

启动项目的时候,会抛出异常


***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.good.base.controller.TestController required a bean of type 'java.lang.String' that could not be found.


Action:

Consider defining a bean of type 'java.lang.String' in your configuration.

如何解决这个问题呢?
其实很简单,将AllArgsConstructor改成RequiredArgsConstructor,然后把需要注入的bean改成final类型的,就可以了

@RestController
@RequiredArgsConstructor
@RequestMapping("test")
public class TestController {

    @Value("${test}")
    private String test;

    private final TestService testService;

    @GetMapping()
    public String get() {
        System.out.println(test);
        return testService.get();
    }
}

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
@NoArgsConstructor和@AllArgsConstructor是Lombok库中的两个注解,用于自动生成类的构造方法。 @NoArgsConstructor注解会自动生成一个无参的构造方法,可以用于创建对象时不需要传入任何参数。这个注解常用于需要使用无参构造方法实例化对象的场景。 @AllArgsConstructor注解会自动生成一个包含所有字段作为参数的构造方法,可以用于创建对象时传入所有字段的值。这个注解常用于需要在实例化对象时一次性传入全部字段的场景。 下面是一个使用@AllArgsConstructor注解的例子: ```java @Component @AllArgsConstructor public class ConstructorDemo { private BeanTest1 beanTest1; @NonNull private BeanTest2 beanTest2; private BeanTest3 beanTest3; @Value("${constructor.name:hello}") private String name; } ``` 在这个例子中,构造方法会接收BeanTest1、BeanTest2、BeanTest3和name作为参数,并将它们赋值给对应的字段。注意,由于@BeanTest2被@NonNull修饰,所以它必须在构造方法中传入一个非null的值,否则会抛出NullPointerException异常。 另外,还有一个注解@RequiredArgsConstructor,它与@AllArgsConstructor类似,也会生成一个包含被final修饰或者@NonNull修饰的字段作为参数的构造方法。它的作用是确保这些字段在实例化对象时都必须被传入值。 总结起来,@NoArgsConstructor用于生成无参构造方法,@AllArgsConstructor用于生成包含所有字段的构造方法,@RequiredArgsConstructor用于生成包含被final修饰或者@NonNull修饰的字段的构造方法。这些注解可以简化代码,提高开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor的区别以及在springboot常用地方](https://blog.csdn.net/xueyijin/article/details/124618309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

、小H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值