当前位置: 首页 > news >正文

【spring】bean的后处理器

目录

      • 一、作用
      • 二、常见的bean后处理器
        • 2.1 AutowiredAnnotationBeanPostProcessor
          • 2.1.1 说明
          • 2.1.2 代码示例
          • 2.1.3 截图示例
        • 2.2 CommonAnnotationBeanPostProcessor
          • 2.2.1 说明
          • 2.2.2 代码示例
          • 2.2.3 截图示例
        • 2.3 ConfigurationPropertiesBindingPostProcessor
          • 2.3.1 说明
          • 2.3.2 代码示例
          • 2.3.3 截图示例

一、作用

  • 1.为bean生命周期的各个阶段提供扩展
  • 2.实例化前、实例化后、依赖注入阶段、初始化前、初始化后、销毁之前提供扩展

二、常见的bean后处理器

2.1 AutowiredAnnotationBeanPostProcessor
2.1.1 说明
  • 1. 用来解析@Autowired @Value注解
2.1.2 代码示例
package com.learning.bean_processor;public class Dog {
}
package com.learning.bean_processor;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;public class Person {private Dog dog;@Autowiredpublic void setDog(Dog dog) {System.out.println("@Autowired生效:" + dog);this.dog = dog;}private String home;@Autowiredpublic void setHome(@Value("${JAVA_HOME}") String home){System.out.println("@Value生效:" + home);this.home = home;}}
package com.learning.bean_processor;import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor;
import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver;
import org.springframework.context.support.GenericApplicationContext;/*** Bean后处理器*/
public class BeanProcessorTest {public static void main(String[] args) {GenericApplicationContext genericApplicationContext = new GenericApplicationContext();// 用原始方法注册三个BeangenericApplicationContext.registerBean("person", Person.class);genericApplicationContext.registerBean("dog", Dog.class);genericApplicationContext.getDefaultListableBeanFactory().setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());// 解析@Autowired @Value注解genericApplicationContext.registerBean(AutowiredAnnotationBeanPostProcessor.class);// 初始化容器// 执行beanFactory后处理器,添加bean后处理器,初始化所有单例genericApplicationContext.refresh();// 销毁容器genericApplicationContext.close();}
}
2.1.3 截图示例

在这里插入图片描述

2.2 CommonAnnotationBeanPostProcessor
2.2.1 说明
  • 1. 解析@Resource @PostConstruct @PreDestroy
2.2.2 代码示例
package com.learning.bean_processor;public class Cat {
}
package com.learning.bean_processor;import javax.annotation.Resource;public class Person {private Cat cat;@Resourcepublic void setCat(Cat cat) {System.out.println("@Resource:" + cat);this.cat = cat;}}
package com.learning.bean_processor;import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor;
import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver;
import org.springframework.context.support.GenericApplicationContext;/*** Bean后处理器*/
public class BeanProcessorTest {public static void main(String[] args) {GenericApplicationContext genericApplicationContext = new GenericApplicationContext();// 用原始方法注册三个BeangenericApplicationContext.registerBean("person", Person.class);genericApplicationContext.registerBean("cat", Cat.class);// 解析@Resource @PostConstruct @PreDestroygenericApplicationContext.registerBean(CommonAnnotationBeanPostProcessor.class);// 初始化容器// 执行beanFactory后处理器,添加bean后处理器,初始化所有单例genericApplicationContext.refresh();// 销毁容器genericApplicationContext.close();}
}
2.2.3 截图示例

在这里插入图片描述

2.3 ConfigurationPropertiesBindingPostProcessor
2.3.1 说明
  • 1. springboot中配置文件属性绑定bean的增强
  • 2. 需要引用springboot的包
2.3.2 代码示例
package com.learning.bean_processor;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;@Data
@ConfigurationProperties(prefix = "java")
public class JavaProperties {private String home;private String version;}
package com.learning.bean_processor;import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor;
import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver;
import org.springframework.context.support.GenericApplicationContext;/*** Bean后处理器*/
public class BeanProcessorTest {public static void main(String[] args) {GenericApplicationContext genericApplicationContext = new GenericApplicationContext();// 把springboot中的ConfigurationPropertiesBindingPostProcessor后处理器加到容器中// 解析@ConfigurationPropertiesConfigurationPropertiesBindingPostProcessor.register(genericApplicationContext.getDefaultListableBeanFactory());genericApplicationContext.registerBean("java_home", JavaProperties.class);// 初始化容器// 执行beanFactory后处理器,添加bean后处理器,初始化所有单例genericApplicationContext.refresh();System.out.println(genericApplicationContext.getBean(JavaProperties.class));// 销毁容器genericApplicationContext.close();}
}
2.3.3 截图示例

在这里插入图片描述

相关文章:

【spring】bean的后处理器

目录 一、作用二、常见的bean后处理器2.1 AutowiredAnnotationBeanPostProcessor2.1.1 说明2.1.2 代码示例2.1.3 截图示例 2.2 CommonAnnotationBeanPostProcessor2.2.1 说明2.2.2 代码示例2.2.3 截图示例 2.3 ConfigurationPropertiesBindingPostProcessor2.3.1 说明2.3.2 代码…...

Centos7安装docker、java、python环境

文章目录 前言一、docker的安装二、docker-compose的安装三、安装python3和配置pip3配置python软链接(关键) 四、Centos 7.6操作系统安装JAVA环境 前言 每次vps安装docker都要看网上的文章,而且都非常坑,方法千奇百怪&#xff0c…...

简单小结类与对象

/*** Description 简单小结类与对象*/ package com.oop;import com.oop.demo03.Pet;public class Application {public static void main(String[] args) {/*1.类与对象类是一个模版:抽象,对象是一个具体的实例2.方法定义、调用!3.对象的引用…...

ABAP 如何获取内表行的索引值(index) ?

获取索引值 在ABAP中,如果需要获取一个内表中某条记录的索引(index),可以使用 READ TABLE 语句。在 READ TABLE 语句后面的 WITH KEY 子句可以指定搜索条件,如果找到了匹配的记录,系统字段 SY-TABIX 将保存…...

ESP32-Web-Server编程- 使用表格(Table)实时显示设备信息

ESP32-Web-Server编程- 使用表格(Table)实时显示设备信息 概述 上节讲述了通过 Server-Sent Events(以下简称 SSE) 实现在网页实时更新 ESP32 Web 服务器的传感器数据。 本节书接上会,继续使用 SSE 机制在网页实时显…...

vue3 Hooks函数使用及常用utils封装

hooks 是什么 vue3使用了composition API,我们可自定义封装hooks,达到复用,在Vue2中采取的mixins,对mixins而言, hooks更清楚复用功能代码的来源, 更清晰易懂。 简单来说:hooks 就是函数的一种写法&#xf…...

matlab 无迹卡尔曼滤波

1、内容简介 略 26-可以交流、咨询、答疑 2、内容说明 无迹卡尔曼滤波 无迹卡尔曼滤波 无迹卡尔曼滤波 3、仿真分析 %该文件用于编写无迹卡尔曼滤波算法及其测试 %注解:主要子程序包括:轨迹发生器、系统方程 % 测量方程、UKF滤波器 %----…...

大脑--学习方法

1.大脑喜欢色彩。平时使用高质量的有色笔或使用有色纸,颜色能帮助记忆。 2.大脑集中精力最多只有25分钟。这是对成人而言,所以学习20到30分钟后就应该休息10分钟。你可以利用这段时间做点家务,10分钟后再回来继续学习,效果会更好…...

4.C转python

1.建立函数: def 函数名(形参): 函数体(记得写缩进) return 返回值(python中可以没有return) 2.调用函数: 函数名(实参) 实参和形参个数相等即可,类型不需要相同 其中接收返回值与C中的差不多 3.如果只是定义而不调用则函数不会执行 4.先定义函数,后调用 5.python中可以…...

YOLOv5项目实战(5)— 算法模型优化和服务器部署

前言:Hello大家好,我是小哥谈。近期,作者所负责项目中的算法模型检测存在很多误报情况,为了减少这种误报情况,作者一直在不断优化算法模型。鉴于此,本节课就给大家详细介绍一下实际工作场景中如何去优化算法模型和进行部署,另外为了方便大家进行模型训练,作者在文章中提…...

JavaScript类型判断:解密变量真实身份的神奇技巧

文章目录 1. typeof运算符2. instanceof运算符3. Object.prototype.toString4. Array.isArray5. 使用constructor属性6. 使用Symbol.toStringTag7. 使用is类型判断库8. 谨慎使用隐式类型转换结语 🎉JavaScript类型判断:解密变量真实身份的神奇技巧 ☆* o…...

MT6893_天玑 1200芯片规格参数介绍_datasheet规格书

天玑 1200(MT6893)是一款专为旗舰级全新5G芯片,它融合了先进的AI、相机和多媒体技术,为用户带来令人惊叹的体验。采用先进的6纳米制程设计,内置各种先进技术。该芯片采用旗舰级的八核CPU架构设计,支持16GB强大的四通道内存以及双通…...

【Android踩过的坑】13.Android Studio 运行成功,但APP没有安装上的问题

【Android踩过的坑】13.Android Studio 运行成功,但APP没有安装上的问题 解决办法: 在app的build.gradle文件下添加以下代码 android {...//android.useNewApkCreatorfalse 在高版本gradle下无效,添加以下代码解决冲突即可packagingOptions…...

redis安装配置

Windows 下 Redis 安装与配置 教程_redis windows-CSDN博客 启动Redis服务 打开cmd窗口,切换到Redis安装路径,输入 redis-server 启动 redis 服务...

企业数字化转型应对传统网络挑战的关键策略

数字化变革正在以前所未有的速度和规模改变着我们的生活和工作方式,使得传统网络架构面临着巨大的挑战。其中包括带宽需求增加、多云应用增加、安全威胁增加以及传统网络设备无法满足需求等问题。 数字化时代需要更高速、更可靠、更安全的网络支持,传统网…...

Java 多线程基础 线程4种创建方式

目录 什么是进程什么是多线程使用多线程的好处使用多线程的应用场景单线程与多线程之间的区别如何理解线程上下文切换使用多线程真的开启越多越好吗线程4种创建的方式1.继承Thread类2.使用Runnable3.使用Callable4.线程池的方式 多线程五种的状态如何优雅的停止一个线程 什么是…...

C++概念相关练习题

目录 一、内存管理 二、运算符重载 三、this指针 四、构造&析构函数 一、内存管理 下面有关c内存分配堆栈说法错误的是( ) A.对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制 B. 对…...

区间合并笔记

文章目录 什么是区间合并怎么做区间合并AcWing 803. 区间合并思路解析my - CODEdalao の CODE 什么是区间合并 区间合并是指给定多个区间,让你将重合的区间合并为一个区间 怎么做区间合并 区间合并类问题大多三个办法: 按左端点排序按右端点排序按左右…...

青少年CTF之PHP特性练习(1-5)

青少年CTF-PHP特性练习 文章目录 青少年CTF-PHP特性练习PHP特性01PHP特性02PHP特性03PHP特性04PHP特性05 PHP特性01 看给出的源码&#xff0c;两个变量的值加密后的MD5相同 <?php$s1 "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47…...

《opencv实用探索·七》一文看懂图像卷积运算

1、图像卷积使用场景 图像卷积是图像处理中的一种常用的算法&#xff0c;它是一种基本的滤波技术&#xff0c;通过卷积核&#xff08;也称为滤波器&#xff09;对图像进行操作&#xff0c;使用场景如下&#xff1a; 模糊&#xff08;Blur&#xff09;&#xff1a; 使用加权平…...

**雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现**在物联网(IoT)飞速发展的今天,传统云

雾计算中的边缘智能&#xff1a;基于Python的轻量级任务调度系统设计与实现 在物联网&#xff08;IoT&#xff09;飞速发展的今天&#xff0c;传统云计算模式已难以满足低延迟、高带宽和实时响应的需求。**雾计算&#xff08;Fog Computing&#xff09;**作为云与终端设备之间的…...

你的企业还在靠人工处理重复工作?同行已经用 AI 释放人力了 | 2026企业数字化转型指南:基于实在Agent的端到端自动化解决方案

在2026年的数字化浪潮中&#xff0c;企业间的竞争已经从“资源规模”转向了“响应速度”。 当多数企业还在为报表合并、数据搬运、跨系统审核等重复性劳动耗费大量人力时&#xff0c; 领先的行业标杆已经开始通过智能体技术重构底层作业逻辑。 这种转变不仅是工具的更替&#x…...

保姆级教程:在PVE 8.3上搞定Windows 11和Server 2025的VirtIO驱动安装与优化

PVE 8.3虚拟化环境下的Windows系统性能优化全攻略 在虚拟化技术日益普及的今天&#xff0c;Proxmox VE&#xff08;PVE&#xff09;作为开源的虚拟化平台&#xff0c;因其稳定性和灵活性受到众多技术爱好者和企业用户的青睐。然而&#xff0c;许多用户在PVE上部署Windows系统时…...

Ollama实测:Yi-Coder-1.5B代码生成速度有多快?3秒搞定日常函数

Ollama实测&#xff1a;Yi-Coder-1.5B代码生成速度有多快&#xff1f;3秒搞定日常函数 1. 测试背景与目标 作为一名开发者&#xff0c;每天都要面对各种编码任务。从简单的工具函数到复杂的算法实现&#xff0c;代码生成速度直接影响着开发效率。Yi-Coder-1.5B作为一款开源的…...

08-多平台集成实战

OpenClaw 多平台集成实战 “让 AI 助手跨越每个通讯渠道,无处不在。” — OpenClaw 在当今多元化的通讯环境中,一个优秀的 AI 助手不应该被限制在单一平台上。OpenClaw 的核心优势之一就是其强大的多平台集成能力,能够同时连接 Discord、Telegram、飞书、企业微信、QQ、钉钉…...

Qwen3-14B GPU算力优化实践:显存占用降低28%的FlashAttention-2配置

Qwen3-14B GPU算力优化实践&#xff1a;显存占用降低28%的FlashAttention-2配置 1. 开箱即用的私有部署方案 对于想要快速部署Qwen3-14B大模型的企业和个人开发者来说&#xff0c;这个经过优化的私有部署镜像提供了完美的解决方案。它基于RTX 4090D 24GB显存显卡和CUDA 12.4环…...

告别手动调参!用大津法(OTSU)实现8路灰度传感器的自适应巡线(附完整C代码)

告别手动调参&#xff01;用大津法实现8路灰度传感器的智能巡线方案 当你在电赛现场调试机器人巡线时&#xff0c;是否经历过这样的场景&#xff1a;刚在A场地调好的阈值参数&#xff0c;换到B场地就完全失灵&#xff1b;上午还能精准巡线的小车&#xff0c;下午因为光照变化就…...

终极指南:3步用VR-Reversal将3D视频转为2D,普通设备也能自由探索VR世界

终极指南&#xff1a;3步用VR-Reversal将3D视频转为2D&#xff0c;普通设备也能自由探索VR世界 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址…...

YOLO12模型与GitHub Actions结合:自动化测试与部署流水线

YOLO12模型与GitHub Actions结合&#xff1a;自动化测试与部署流水线 1. 引言 在目标检测项目的开发过程中&#xff0c;我们经常面临这样的挑战&#xff1a;每次修改代码后都需要手动运行测试、构建镜像、部署模型&#xff0c;这个过程既耗时又容易出错。特别是对于YOLO12这样…...

NoSleep防休眠工具:系统唤醒与持续运行的高效解决方案

NoSleep防休眠工具&#xff1a;系统唤醒与持续运行的高效解决方案 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 在数字化工作环境中&#xff0c;电脑意外休眠往往导致工作中…...