spring扩展点之InitializingBean接口实战

本文介绍如何使用InitializingBean接口将配置文件中的属性注入到Java对象中,并通过实例演示了这一过程。此外,还解答了一些常见疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:InitializingBean接口让我们可以干涉bean的初始化过程,算是spring给我们提供的一个扩展点咯,凡是继承InitializingBean接口的类,在创建bean的时候都会执行afterPropertiesSet方法,在这个方法里面我们可以写一些自己的业务逻辑。

实战场景之把配置类java代码化

把配置类java代码化是什么鬼哦,就是把application.properties或者application.yml中的配置属性通过InitializingBean接口封装成一个java对象,方便他人调用这些属性。代码就是下面这样。点击学习@Value注解详解

@Component
public class testBean implements InitializingBean {
    @Value("${Good.name}")
    private String goodName;
    @Value("#{100}")
    private String goodPrice;
    public static String GOODNAME;
    public static String GOODPRICE;

    public testBean() {
        System.out.println("testBean创建");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("testBean创建之后进行属性设置");
        GOODNAME = this.goodName;
        GOODPRICE = this.goodPrice;
    }
}

测试

在springBoot项目中随便找个service实现类,看是否属性已经注入进去了。

@Service
@Slf4j
public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements GoodsService {
    public void testInitializingBean() {
        log.error("goodName: " + testBean.GOODNAME);
        log.error("goodPrice: " + testBean.GOODPRICE);
    }
}

答疑

1:可能有些小伙伴此时在想,我在需要用到yml属性的service实现类中直接用@Value注解注入不就行了嘛,干嘛写这么个封装类讷,不是多此一举嘛:(公司开发讲究的是代码的复用性和可维护性,等下我yml中的属性变一个名字,我改这个封装类就好了,而你需要动刀很多个用@Vlue这种方式注入的类
2:还有些小伙伴可能会想,直接写成下面,goodName前面加个static关键字不就行了嘛,干嘛要多一步赋值的操作,不是多此一举嘛,但是经过本人测试,goodName注入不进来一直为null,与spring源码有关,以后细究!不过下面这种写法给goodName、goodPrice加个set、get方法别的类调用get方法还是能获取到值的。

@Component
public class testBean implements InitializingBean {
    @Value("${Good.name}")
    public static String goodName;
    @Value("#{100}")
    public static String goodPrice;
  

    public testBean() {
        System.out.println("testBean创建");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("testBean创建之后进行属性设置");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小咸鱼的技术窝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值