当前位置: 首页 > 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; 使用加权平…...

科技中介机构如何提升服务效率与转化率?

观点作者&#xff1a;科易网-国家科技成果转化&#xff08;厦门&#xff09;示范基地 在数智化浪潮席卷全球的今天&#xff0c;科技创新正经历着一场深刻的变革。数据已成为关键生产要素&#xff0c;重塑着创新主体间的关系&#xff0c;也催生了全新的科技成果转化模式。在这一…...

Wireshark抓包提取NTLMv2 Hash实战指南

1. 这不是“黑客演示”&#xff0c;而是一次内网安全加固前的必做体检你有没有遇到过这样的情况&#xff1a;某天突然收到告警&#xff0c;说域控日志里出现了大量异常的NTLM认证失败记录&#xff1b;或者渗透测试报告里赫然写着“存在明文凭据泄露风险”&#xff0c;但你翻遍所…...

Win10/Win11 HTTPS抓包证书信任失效的根因与全链路解决方案

1. 为什么HTTPS抓包在Win10/Win11上总卡在“证书不信任”这一步&#xff1f;你肯定试过&#xff1a;Charles启动、Proxy端口设好、手机连上同一Wi-Fi、HTTP请求能抓到&#xff0c;但所有HTTPS流量全是灰色的“unknown”或直接显示“Failed to connect to remote host”。点开看…...

告别ifconfig!用ip命令和ethtool搞定Linux网卡状态排查(附实战案例)

告别ifconfig&#xff01;用ip命令和ethtool搞定Linux网卡状态排查&#xff08;附实战案例&#xff09; 在Linux服务器运维中&#xff0c;网络故障排查是最常见的任务之一。记得去年深夜处理一次线上事故时&#xff0c;面对一台突然失联的数据库服务器&#xff0c;我习惯性地敲…...

10B小模型为何在真实业务中碾压百B大模型

1. 项目概述&#xff1a;小模型正在悄悄改写大模型的游戏规则最近在几个技术团队的内部分享会上&#xff0c;我连续三次被问到同一个问题&#xff1a;“你们还在追着百B参数的大模型跑吗&#xff1f;”——问话的人里&#xff0c;有刚从云厂商调来的架构师&#xff0c;有带AI产…...

从拉灯呼叫到闭环处理:安灯管理软件操作流程能解决哪些场景痛点?一套安灯管理软件操作流程实战

在制造工厂的生产现场&#xff0c;异常就像不速之客&#xff0c;总在最忙的时候敲门。设备突然停机、物料没送到位、质量出现批量不良……这些异常发生后&#xff0c;最让人头疼的往往不是问题本身&#xff0c;而是处理问题的过程。工人发现设备停了&#xff0c;扯着嗓子喊班长…...

1987年6月27日下午13-15点出生性格、运势和命运

1987年6月17日&#xff0c;下午15点到17点之间&#xff0c;正值盛夏时节&#xff0c;阳光炽烈而漫长。这一天出生的孩子&#xff0c;是中国改革开放后“黄金十年”中诞生的又一批弄潮儿。他们的成长轨迹&#xff0c;与全球化浪潮的涌入、市场经济的深化以及互联网的萌芽几乎同步…...

从文件上传到 RAG 检索:真正看懂了一个 AI 项目的知识库链路

一、前言&#xff1a;今天不是单独学一个知识点&#xff0c;而是串起了一条完整链路 今天继续分析 AI 项目中的 RAG 模块时&#xff0c;我发现自己之前对“文件上传”“文件切片”“向量化”“召回”“大模型回答”这些概念&#xff0c;虽然都单独听过&#xff0c;但真正放到项…...

印地语语音合成落地难?ElevenLabs官方未披露的4大限制、3种绕过技巧,及2个替代模型性能对比数据

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;印地语语音合成落地难&#xff1f;ElevenLabs官方未披露的4大限制、3种绕过技巧&#xff0c;及2个替代模型性能对比数据 ElevenLabs对印地语支持的真实现状 ElevenLabs虽在API文档中标注“支持印地语&#x…...

Midjourney新艺术风格突然失效?92%用户忽略的--stylize冲突机制与3步回滚修复法

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Midjourney新艺术风格突然失效&#xff1f;92%用户忽略的--stylize冲突机制与3步回滚修复法 近期大量用户反馈&#xff1a;在 Midjourney v6.1 中启用高 stylize 值&#xff08;如 --stylize 1000&#xff0…...