范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Spring系列(八)Spring生命周期中BeanPostProcessor接口用法

  今天给大家介绍BeanPostProcessor接口用法,希望对大家能有所帮助!
  1、BeanPostProcessor 概念介绍
  BeanPostProcessor接口通常被称为Bean的后置处理器,它是Spring中定义的接口,可以在Spring容器的创建过程中(主要在Bean初始化前后进行工作)回调BeanPostProcessor中定义的两个方法。 2、BeanPostProcessor接口方法
  postProcessBeforeInitialization :在每一个bean对象的初始化方法调用之前回调。
  postProcessAfterInitialization :在每个bean对象的初始化方法调用之后被回调。
  说明 :以上两个方法的返回值都不能为null,否则在后续的初始化方法会报空指针或者通过getBean()方法无法获取Bean对象。主要原因是如果返回值为null的情况下以上两个方法从Spring容器获取bean实例,没有再次放入Spring容器中去,这样容器中就没有了。 2.1 BeanPostProcessor源码内容package org.springframework.beans.factory.config;  import org.springframework.beans.BeansException; import org.springframework.lang.Nullable;  public interface BeanPostProcessor {     @Nullable     default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {         return bean;     }      @Nullable     default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {         return bean;     } } 3、BeanPostProcessor 接口的作用
  可以Spring容器中完成bean实例化、配置以及其他初始化方法前后根据业务的场景增加相应的逻辑处理。典型的案例AOP的实现。 4、代码示例4.1 新建Person.java 类文件package com.spring.bean;  public class Person {     private String name;     private Integer age;     private String address;      public Person(String name, Integer age, String address) {         this.name = name;         this.age = age;         this.address = address;     }      public Person() {     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public Integer getAge() {         return age;     }      public void setAge(Integer age) {         this.age = age;     }      public String getAddress() {         return address;     }      public void setAddress(String address) {         this.address = address;     }      @Override     public String toString() {         return "Person{" +                 "name="" + name + """ +                 ", age="" + age + """ +                 ", address="" + address + """ +                 "}";     } }  4.2、新建MyBeanPostProcessor.javapackage com.spring.bean;  import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.stereotype.Component;  @Component public class MyBeanPostProcessor implements BeanPostProcessor {     /**      * 实例化、依赖注入完毕,在调用显示的初始化之前完成一些自定义的初始化逻辑      * 方法返回值不能为null      * 返回null那么在后续初始化方法会报空指针异常或者通过getBean()方法获取不到bena实例      * 如果设置为null情况下,后置处理器从Spring IoC容器中取出bean实例对象没有再次放回IoC容器中      */     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {         System.out.println("postProcessBeforeInitialization执行了"+beanName);         return bean;     }     /**      * 实例化、依赖注入、初始化完成后时执行      * 方法返回值也不能为null      * 如果返回null那么在后续初始化方法将报空指针异常或者通过getBean()方法获取不到bena实例对象      *  如果设置为null情况下,后置处理器从Spring IoC容器中取出bean实例对象没有再次放回IoC容器中      */     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {         System.out.println("postProcessAfterInitialization"+beanName);         return bean;     } }  4.3、新建TestBeanPostProcessorConfig.java 配置类package com.spring.config;  import com.spring.bean.UserInfo; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller;  @Configuration @ComponentScan(value = "com.spring.bean",includeFilters = {         @ComponentScan.Filter(type = FilterType.ANNOTATION                 , classes = {Component.class, Controller.class}         ),         @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE                 , classes = {UserInfo.class}         ), }) public class TestBeanPostProcessorConfig {  }  4.4、新建测试类 TestBeanPostProcessor.javapackage com.spring.test;  import com.spring.config.TestBeanPostProcessorConfig; import org.springframework.context.annotation.AnnotationConfigApplicationContext;  public class TestBeanPostProcessor {     public static void main(String[] args) {         AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(TestBeanPostProcessorConfig.class);      } }
  输出结果: postProcessBeforeInitialization执行了testBeanPostProcessorConfig postProcessAfterInitializationtestBeanPostProcessorConfig UserInfo构造器执行了 postProcessBeforeInitialization执行了userInfo PostConstruct 初始化方法执行 postProcessAfterInitializationuserInfo  Process finished with exit code 0

智能手机通过这4个操作,就能清除大量内存,手机从此不再卡顿本文编辑今日头条作者小俊技术分享未经授权严禁转载,发现抄袭者将进行全网投诉分享生活小妙招,享受科技新生活!大家好,欢迎来到今天的知识分享!我是你们的好朋友小俊!在之前给大家分享过如内存管理一文读懂Linux内存组织结构及页面布局导语linux内存是后台开发人员,需要深入了解的计算机资源。合理地使用内存,有助于提升机器的性能和稳定性。本文主要介绍linux内存组织结构和页面布局,内存碎片产生原因和优化算法,彻底明白Go语言的Channel了channel概述Hello大家好!我们又见面了,本文我们一起搞懂Go语言中channel及channel底层实现和一些常见面试题。channel是Go语言内建的firstclas比肩iOS?赵明透露MagicUI6。0系统,基于安卓底层不用鸿蒙荣耀CEO赵明参与2021人民财经高峰论坛,首次公布旗下首款折叠屏MagicV外观和细节,号称将打造一部到位的领先概念。荣耀MagicV不仅全方位领先行业,还将推出MagicUI6为什么电脑没有显卡(独立集成核显都没有)也能开机,并且通过远程桌面正常连接使用?无集成显卡是不能远程桌面的,晕倒。没集成显卡输出不等于没集成显卡。打个比方吧。你我他三个人,我相当于你现在用的这台电脑,他相当于没有显卡的那台电脑。现在呢,你要算11,可是我不会算马斯克预言金融危机,操纵股市操纵币圈,全为外星独立建国?马一龙常常口出狂言狗狗币是人民的货币。咱美国经济刺激政策,不符合民众的最大利益我要510年送人类上火星,并在火星实行直接民主制。我们想政变谁就政变谁。是不是有那味了,有点推特建国那运维常识什么是关系数据库?关系数据库是最流行和最常用的数字数据库,在本文中,我们将讨论关系数据库它的工作原理示例关系数据库和非关系数据库之间的差异等等。什么是关系数据库?一个关系数据库是基于组织彼此相关的数怎么联系微信客服电话微信小程序分享朋友圈,有如下方法微信人工客服电话0760一8588一9332打开微信,点击象放大镜一样的微信搜索按钮2点击右上角的三个小圆点的设置按钮3出现的弹窗,点击中间的分享到2022年对于李一男是关键的一年,这也将决定他的社会地位新能源汽车是当下最火热的行业,随着国内新能源汽车的销量占整体汽车销量的比例即将冲破两成,小米牛创等新军也将在今年进入实质阶段,其中饱受争议的李一男创立的牛创将在今年交付第一辆汽车,三大运营商精准获客原理运营商大数据精准顾客的基本原理1,任何人一切上网管理都摆脱不了运营商。2,运营上存储了每一个人的上网管理,语音聊天,行为短信,互动交流,即时位置等各式各样行为。3,每一个行为都反映专访臻驱科技沈捷一位技术专家的创业攻关和社会责任实践21世纪经济报道记者赵娜上海报道通过硬核的智能能源转换来改善人类生活。这是我们电力电子行业的使命,也是我们公司的使命。臻驱科技创始人兼董事长沈捷说。沈捷毕业于德国亚琛工业大学,以特
油耗水平持续下降,为啥负积分10万的车企却越来越多?5月24日,工信部发布乘用车企业平均燃料消耗量与新能源汽车积分并行管理实施情况年度报告(2021)。报告显示,在积分考核约束和积分收益激励下,我国汽车行业的平均油耗持续下降,单车平韩国5G普及率超20,即将完全关闭2G网络IT之家5月28日消息韩国信息通信技术部周二表示,已批准LGUplus公司在6月底前逐步淘汰其2G服务的计划,这将标志着韩国旧有电信网络将完全终止。LGUplus表示,将通过为移动诺基亚谈造车只聚焦5G网络这一端百度在沪成立云计算公司2021年5月28日精选资讯如下互联网新鲜事盲盒手办备货量同比增长1000据某物流平台数据显示,已有数百万吨618预售商品备入仓库,规模同比增长100。其中,盲盒手办备货量同比暴增长三角新能源汽车产业链联盟成立近日,由上汽集团吉利控股集团奇瑞集团江苏省汽车工程学会联合牵头,成立了长三角新能源汽车产业链联盟(以下简称联盟)。来自三省一市共73家新能源汽车产业链企业共同响应成立,涉及电池电机微软SurfaceDuo双屏安卓手机推送5月更新修复恼人BugIT之家5月29日消息外媒报道,近期,微软发布了SurfaceDuo的2021年5月安卓系统更新,北美地区升级到版本号2021。419。70,欧洲地区升级到版本号2021。419。李劲松行业对保险科技的理解不能简单停留在技术和保险业结合的层面北京商报讯(记者陈婷婷周菡怡)5月30日,北京商报记者从业内获悉,中国精算师协会副秘书长李劲松在2021第四届华夏时报保险科技峰会上表示,不能将保险科技视为对消费者割韭菜的武器。在微信又更新了惊喜!炸屎特效绝了你知道吗?最近微信又更新了,还是那句老话解决了一些已知问题,但实际上这次更新,给我们带来了很多有趣的玩法!表情碰撞特效当你和朋友一人发屎一人发炸弹时,屏幕上就会出现炸屎特效!简直魔厉害了!2021年这5大最好的安卓手机机皇来袭,您在用哪款呢?哈喽,您好!我是原呵呵,点点关注吧,更多精彩内容等着您智能手机市场是一场激烈的竞赛您可以选择运行iOS操作系统的Apple其iPhone,或者选择许多生产基于其AndroidOS的当一个微信号可以同时登陆在两个手机上,将是一种什么体验?一直以来,大家都以为一个微信号只能在一个手机上登陆,如果想要同时登陆在两个设备上,也只能是一个手机和一个平板或者一个手机和一个电脑上,从来都不能同时在两个手机上登陆。如果,你现在还30万级座驾,这三款都是狠货,最快零百3秒多,关键均由华系制造30万级预算选车,你会怎么考虑呢?大部分朋友可能都会去看各大豪华品牌,入手新能源座驾的,也按耐不住去往特斯拉4S店的步伐。但是,在该价位中,咱们自己的华系车其实也有不少可选车型比如这?暗示折叠屏会成为一大趋势吗?折叠屏这几年的风特别大。先是三星带头推出三星GalaxyZFoldGalaxyZFlip和GalaxyZFold2。随即刮起了折叠屏的热潮。虽然是万元起步的售价,但是销售额依然增长