首页 > 其他分享 >spring扩展点之InitializingBean接口实战

spring扩展点之InitializingBean接口实战

时间:2024-01-20 22:08:39浏览次数:31  
标签:InitializingBean String spring 接口 public Value testBean goodName


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


文章概括

  • 实战场景之把配置类java代码化
  • 测试
  • 答疑



实战场景之把配置类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
From: https://blog.51cto.com/u_16414043/9346250

相关文章

  • 利用aop、拦截器HandlerInterceptor来实现接口限流,日志收集
    前言:aop是面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。拦截器是web请求中一个请求周期中的一环就实现接口限流这个需求来说,用aop和HandlerInterceptor都可以来实现,就是在调用接口之前做一些约束而已。aop+自定义注解+Semaphore实现接口限流自......
  • springboot多模块项目(微服务项目)正确打包(jar)方式
    大致步骤新建一个springboot项目名称为父亲添加父快捷方式。新建子模块,子模块同时插入新建springboot的项目,依次创建enty和web模块(关键是并配置好pom文件)web模块依赖于entiy模块中的实体类,创建测试控制器,先测试项目没问题再开始打包(jar)开始打包测试jar是否有用创建项目注意点:子模......
  • springBoot项目正确认识打war包方式(含打包代码链接)
    一:新建一个普普通通的springBoot项目二:并且编写测试controller@RequestMapping@RestControllerpublicclassController{@RequestMapping("/zzh")publicStringtoString(){return"zzh666";}}三:改造启动类(重点)主要就是继承SpringBootServletInitiali......
  • springboot整合springSecurity入门案例(实现登录,记住我等常用标签使用)
    一,整合进依赖每个依赖都标了注释,大家可以按照自己需要的来添加,置于配置问件啥的,大家可以参考springboot+mybatisplus+redis整合(附上脚手架完整代码)<!--主要就是加了这个依赖--><dependency><groupId>org.springframework.security</groupId><artifact......
  • springboot+mybatis-plus+redis整合(附上脚手架完整代码)
    首先新建一个springboot项目next到这里的时候,我们可以选择用jdk几,还有就是Group,这个一般就是com.公司名字了,artifact就是项目名字。个人开发我还是喜欢用com.名字前缀哈。到了这一步的话,如果对这个项目有什么别的需求,比如需要用到mybatis啥的可以勾相应的选项。其实就是idea自动帮......
  • springboot项目结合filter,jdk代理实现敏感词过滤(简单版)
    我们对getParameter()这个方法得到的参数进行敏感词过滤。实现思路:利用过滤器拦截所有的路径请求同时在在过滤器执行的时候对getParameter得到的value值进行过滤。最后呢,到我们自己的实现的逻辑中呢?这个value值就被我们做过处理了。1:自定义的过滤配置文件把文件位置放在resource下的......
  • 正确理解springboot国际化简易运行流程
    看源码可以看出–》大致原理localeResolver国际化视图(默认的就是根据请求头带来的区域信息获取Locale进行国际化)返回的本地解析是根据响应头来决定的)接着按住ctrl点localeresolver可知localeresolver是一个接口于是有了这些我们只需通过继承LocaleResolver来自定义我们自己的Loca......
  • springboot中优雅的个性定制化错误页面+源码解析
    boot项目的优点就是帮助我们简化了配置,并且为我们提供了一系列的扩展点供我们使用,其中不乏错误页面的个性化开发。理解错误响应流程我们来到org.springframework.boot.autoconfigure.web.servlet.error下的ErrorMvcAutoConfiguration这里面配置了错误响应的规则。主要介绍里面注册......
  • 注解版的springaop实操讲解(赋完整测试代码)
    aop是个很强的东西,我们可以用来实现日志收集,鉴权,敏感词过滤等等功能。在说注解版的springaop使用之前,一些专业术语我用大白话来复述一遍,希望大家不要嫌弃。切面:切入点+通知连接点:目标对象中被增强的某个方法切点:连接点的集合目标对象:被增强的对象织入:把代理逻辑加入到目标对象的过......
  • spring boot一个奇怪的错误(There was an unexpected error (type=Internal Server Err
    今天运行springboot的时候爆了这个错(Therewasanunexpectederror(type=InternalServerError,status=500).Exceptionparsingdocument:template=“index”,line6-column3)说什么无法解析文档,昨天还运行的好好的,看一下控制台说什么meta标签没关闭,我可是用idea自己创......