@Value使用报类无法创建bean Error creating bean with name ‘commonController‘ defined

原因:在项目开发中,一个类的final属性值需要用到springBoot配置文件中的信息。
 

错误展示:程序启动时, 这样会报找不到usrename的bean信息。就是username没有值

public class test{

    @Value(value = "${data.dataSource.username}")
    private String username;

    @Value(value = "${data.dataSource.pass}")
    private String pass;

    private User user = new User(username,pass);

}

@Value

这个是spring框架中的注解,可以注入配置文件(yml,propertiery)的属性值或者表达式,它可以将配置信息注入到一个目标类或者方法的属性中去。
支持从配置文件、环境变量、系统属性等多种来源注入值。

注意问题:

处理中文乱码:如果在配置文件中使用中文,可能会遇到编码问题。确保配置文件的编码格式正确(如UTF-8),并且在读取时使用适当的解码方式,可以避免中文乱码问题。

@value的作用时间:Bean初始化时,@Value注解的值会在Spring容器创建和初始化Bean时被注入。当Spring容器启动时,他会读取所有的配置文件,并在创建Bean时将@Value注解的值注入到相应的字段中。

与java类加载相比

java类加载:java的类加载机制是在JVM启动时加载类得定义,包括静态初始化快的初始化。在类加载的过程中,静态字段和静态初始化块被执行,但是这与spring的bean加载是不同的过程。

sping bean初始化: Spring容器在启动时会加载Bean的定义,并创建和初始化Bean。@Value注解的值会被注入到Bean的属性中。这发生在Bean的实例化之后,但在Bean的@PostConstruct方法或其他初始值回调之前。

@PostConstruct注解正是解决这个问题的关键。

可以写一个初始化方法,在方法内进行赋值

public class test{

    @Value(value = "${data.dataSource.username}")
    private String username;

    @Value(value = "${data.dataSource.pass}")
    private String pass;

    private User user;

    @PostContrusr
    public void init(){
        user = new User(username,pass)
        
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值