java每日一记 —— 常见的Bean后置处理器

news2024/11/22 14:18:35

此代码在jdk11上测试通过,SpringBoot版本为2.7.14

1.上代码

1.测试方法

public class Dome04Application {
    public static void main(String[] args) {
        // 这是一个干净的容器
        GenericApplicationContext context = new GenericApplicationContext();
        // 添加3哥Bean
        context.registerBean("andyBean01", Bean1.class);
        context.registerBean("andyBean02", Bean2.class);
        context.registerBean("andyBean03", Bean3.class);

        context.getDefaultListableBeanFactory().setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());

        // 注入解析Autowired注解的Bean
        // 执行时机:依赖注入
        context.registerBean(AutowiredAnnotationBeanPostProcessor.class);

        // 解析@Resource @PostConstruct @PreDestroy注解的Bean
        // 执行时机:依赖注入解析@Resource,初始化前执行@PostConstruct,销毁时执行@PreDestroy
        context.registerBean(CommonAnnotationBeanPostProcessor.class);

        // 注册@ConfigurationProperties注解的Bean
        ConfigurationPropertiesBindingPostProcessor.register(context.getDefaultListableBeanFactory());

        // 初始化
        context.refresh();
        // 销毁
        context.close();

    }
}

2.创建Bean1


public class Bean1 {
    private static final Logger log = LoggerFactory.getLogger(Bean1.class);

    private Bean2 bean2;

    @Autowired
    public void setBean2(Bean2 bean2) {
        log.debug("@Autowired 生效: {}", bean2);
        this.bean2 = bean2;
    }

    @Autowired
    private Bean3 bean3;

    @Resource
    public void setBean3(Bean3 bean3) {
        log.debug("@Resource 生效: {}", bean3);
        this.bean3 = bean3;
    }

    private String home;

    @Autowired
    public void setHome(@Value("${JAVA_HOME}") String home) {
        log.debug("@Value 生效: {}", home);
        this.home = home;
    }

    @PostConstruct
    public void init() {
        log.debug("@PostConstruct 生效");
    }

    @PreDestroy
    public void destroy() {
        log.debug("@PreDestroy 生效");
    }

    @Override
    public String toString() {
        return "Bean1{" +
               "bean2=" + bean2 +
               ", bean3=" + bean3 +
               ", home='" + home + '\'' +
               '}';
    }
}

3.创建Bean2

public class Bean2 {
}

4.创建Bean3

public class Bean3 {
}

5.创建Bean4

@ConfigurationProperties(prefix = "java")
public class Bean4 {

    private String home;

    private String version;

    public String getHome() {
        return home;
    }

    public void setHome(String home) {
        this.home = home;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    @Override
    public String toString() {
        return "Bean4{" +
               "home='" + home + '\'' +
               ", version='" + version + '\'' +
               '}';
    }
}

2.测试结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode-470. 用 Rand7() 实现 Rand10()【数学 拒绝采样 概率与统计 随机化】

LeetCode-470. 用 Rand7 实现 Rand10【数学 拒绝采样 概率与统计 随机化】 题目描述:解题思路一:首先说一个结论就是(rand_X() - 1) Y rand_Y() > [1,X*Y],即可以等概率的生成[1, X * Y]范围的随机数,其实就像军训的时候报数…

DG领域常见算法:Domain Alignment

本文主要参考:Domain Generalization: A Survey Problem Definition 在DG的setting中,我们通常能拿到 K ( K ≥ 1 ) K(K\ge 1) K(K≥1)个source domain的数据,这几个source domain相似但并不相同,记为 S { S k { ( x ( k ) , …

Vue 实现基于 LogicFlow 自定义节点美化工作流

话不多说,先看效果: 动态效果: 完整设计界面: 右键菜单: 未完待续…

Java零基础——秒杀篇

1.【秒杀】 1.1. 技术选择型 Springboot Redis Rocketmq Mysql MybatisPlus 1.2. 架构图 1.3. 准备工作-数据库 SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS 0;-- ------------------------------ Table structure for goods-- ----------------------------DROP…

【labview报错,缺少GOOP Development Suite】

操作 当labview报此错误时,第一类情况为缺少包,第二类为所使用的GPU包已失效 以下为第一类缺包的解决方式 登录VIPM,如何安装VIPM查看此贴:VIPM安装 打开VIPM后,右上角输入goop,双击搜索出的安装包 勾选需要安装的包…

Java_ArrayList顺序表详解

目录 前言 顺序表 ​编辑 顺序表和数组 ArrayList简介 说明 ArrayList使用​编辑 ArrayList常见操作 ArrayList实现二维数组 ArrayList的遍历 ArrayList的扩容机制 总结 前言 一个高端的程序员,往往都是数据结构学的很好,判断一个程序的优劣也是看数据结构学的好与坏.…

Mysql-全外连接-Union和Union ALL的辨析及练习

mysql不支持FULL JOIN,但是可以用 (select 语句1) union (select 语句2)代替 🐶1. SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的 SELECT 语句…

使用git出现的问题

保证 首先保证自己的git已经下载 其次保证自己的gitee账号已经安装并且已经生成ssh公钥 保证自己要push的代码在要上传的文件夹内并且配置文件等都在父文件夹(也就是文件没有套着文件) 问题 1 $ git push origin master gitgitee.com: Permission de…

Vue混淆与还原

Vue混淆与还原 引言 Vue是一种流行的JavaScript框架,用于构建用户界面。它简单易用且功能强大,备受开发者喜爱。然而,在传输和存储过程中,我们需要保护Vue代码的安全性。混淆是一种有效的保护措施,可以加密和压缩代码…

简单构造好题

没啥思路,看到题解,先处理最大值,发现非常的nice // Problem: C. Polycarp Recovers the Permutation // Contest: Codeforces - Codeforces Round 756 (Div. 3) // URL: https://codeforces.com/problemset/problem/1611/C // Memory Limit:…

window下安装RocketMQ

本文以window11、JDK1.8、RocketMQ4.9.7版本为例 1.下载安装 1.1.官网 官网官网文档官网下载 1.2.下载 1.3.解压 2.配置 2.1.环境变量添加ROCKETMQ_HOME 2.2.环境变量添加JAVA_HOME 安装jdk1.8,并配置环境变量JAVA_HOME 3.启动 如果JAVA_HOME未指向jdk1.…

win10下maven安装与配置

1.下载安装 去官网下载最新版的安装包,然后解压到安装目录。 2.配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PATH中。 如果想要修改maven的本地仓库位置&…

spring data Redis整合spring cache实战(附源码及源码分析)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 最近在研究缓存框架,打算写一个多级缓存框架的sdk。所以想借鉴(抄袭)下spring的缓存框架的实现 spring cache reids spring cache对各种缓存进…

台灯哪个品牌更护眼推荐?学生党备考台灯推荐

近些年近视人数持续升高,我们越来越注意个人的健康问题,而对于视力健康,尤其是儿童青少年们,在3-14岁这个年龄段近视机率更高,儿童青少年近视率高达52.7%,随着开学季到来,应该怎么选护眼台灯呢&…

【安装VIPM】

操作 打开VIPM安装包,下载链接:VIPM安装包,双击vipm.exe 点击下一步 勾选VI Package,点击下一步 这时会有弹窗,无需担心,等待即可 点击下一步 选择我接受,点击下一步 这里可选择是否要创…

Linux环境搭建SVN服务器并结合内网穿透实现远程访问

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. Ubuntu安装SVN服务二. 修改配置文件2.1 修改svnserve.conf文件2.2 修改pass…

STM32-新建工程(标准库)

目录 STM32F10x新建工程(标准库) 移植文件夹 新建工程 添加启动文件和必需文件 在工程中加载新添加的文件 在工程中添加文件路径 在工程中添加main函数 添加lib库 添加必需文件 添加宏定义 点亮LED(标准库) STM32F10x新…

Xshell7和Xftp7的下载、安装2023最新最全

1.下载 1.官网地址: XSHELL - NetSarang Website 选择学校免费版下载 2.将XSHELL和XFTP全都下载下来 2.安装 安装过程就是选择默认选项,然后无脑下一步 3.连接服务器 1.打开Xshell7,然后新建会话 2.填写相关信息 出现Connection establ…

数据库管理-第123期 Oracle相关两个参数(202301205)

数据库管理-第123期 Oracle相关两个参数(202301205) 最近在群聊中看到俩和Oracle数据库相关的俩参数,一个是Oracle数据库本身的,一个是来自于Weblogic的,挺有趣的,本期研究一下。(本期涉及参数…

面试官:说说webpack的热更新是如何做到的?原理是什么?

面试官:说说webpack的热更新是如何做到的?原理是什么? 一、是什么 HMR 全称 Hot Module Replacement,可以理解为模块热替换,指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个应…