ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spring扩展点之InitializingBean接口实战

2021-01-27 20:30:45  阅读:156  来源: 互联网

标签:InitializingBean String spring 接口 public Value testBean goodName


前言: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创建之后进行属性设置");
    }
}

标签:InitializingBean,String,spring,接口,public,Value,testBean,goodName
来源: https://blog.csdn.net/qq_42875345/article/details/113267366

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有