Spring6.0官方文档示例:(28)多种方式添加BeanPostProcessor

news2024/12/24 8:18:28

一、定义三个BeanPostProcessor

package cn.edu.pku;


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

@Component
public class MyScannedBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("my scanned BeanPostProcessor......before: " + beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("my scanned BeanPostProcessor......after " + beanName);
        return bean;    }
}

package cn.edu.pku;

import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyXmlBeanPostProcessor implements BeanPostProcessor {
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        System.out.println("my xml BeanPostProcessor......before : " + beanName);

        return bean; //
    }
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println("my xml BeanPostProcessor......after : " + beanName);
        return bean;
    }
}

package cn.edu.pku;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyManualBeanPostProcessor implements BeanPostProcessor{
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("my manual BeanPostProcessor......before: " + beanName);
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("my manual BeanPostProcessor......after : " + beanName);
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }
}

二、定义bean类:

package cn.edu.bju.service;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.Locale;

@Service
public class PrintService {
    public String printInfo(String info){
        System.out.println(info);
        return info.toUpperCase();
    }
}

三、配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">




        <bean id="printService" class="cn.edu.bju.service.PrintService" lazy-init="true"/>

        <context:component-scan base-package="cn.edu.pku"/>
        <bean class="cn.edu.pku.MyXmlBeanPostProcessor"/>


</beans>


四、定义主类

package cn.edu.tju.test;

import cn.edu.pku.MyManualBeanPostProcessor;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public final class Test04{
    public static void main(final String[] args) throws Exception {
        ConfigurableApplicationContext ctx = new
                ClassPathXmlApplicationContext("spring3.xml");

        ctx.getBeanFactory().addBeanPostProcessor(new MyManualBeanPostProcessor());
        Object printService = ctx.getBean("printService");
        System.out.println(printService);
    }
}


五、运行结果:
在这里插入图片描述
可以看到,ComponentScan扫描到的BeanPostProcessor最先执行,xml配置文件里的随后执行,而我们手动添加的BeanPostProcessor最后执行(因为它在保存BeanPostProcessor的CopyOnWriteArrayList的末尾)

###############################
执行顺序貌似和官方文档描述有不同
在这里插入图片描述

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

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

相关文章

RHCE——五、Web服务器及内网穿透(实验篇)

Web服务器篇 一、快速搭建网站二、更改网页启动目录三、内网穿透1、准备工作2、搭建网站3、测试&#xff1a;浏览器中输入ip进行测试4、使用花生壳进行内网穿透4.1 注册并登陆4.2 点击添加映射4.3 Linux安装花生壳客户端 5、注意 四、搭建具有身份验证功能网站1、准备工作2、编…

发票的种类

目录 增值税专用发票 增值税普通发票 增值税电子普通发票 机打式发票 定额发票 机动车销售统一发票 增值税专用发票 填写增值税发票时&#xff0c;单位全称、纳税人识别号、统一信用代码必填项且正确无误。专票必须填写&#xff0c;普票可不填写&#xff0c;若填写则必须…

CNN-LSTM选A股牛股(代码+数据+一键可运行)

在当前金融市场中&#xff0c;投资者对于高效的股票推荐系统需求不断增加。为了满足这一需求&#xff0c;我们开发了一款基于人工智能的牛股推荐器V1.0&#xff0c;其技术路线和方法在本文中将得到详细阐述。 全代码和数据关注公众号《三个篱笆三个班》免费提供&#xff01;一…

CentOS7安装Oracle11g 11.2.0.4

一、安装环境 CentOS Linux release 7.2.1511 (Core) Oracle Database 11g Release 2 (11.2.0.4) 二、安装前准备 2.1 修改主机名 修改/etc/sysconfig/network配置文件中的HOSTNAME变量 [rootxqzt ~]# hostnamectl set-hostname oracledb####永久性修改[rootxqzt ~]#vi /etc/sy…

茶叶病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

代码运行要求&#xff1a;Torch库>1.13.1即可 1.茶叶病害数据集(7类病害和1种正常) 1.茶叶病害数据集介绍(这个茶病数据集包含茶叶&#xff0c;显示了茶的7种常见疾病&#xff1a; 红叶斑 藻类叶斑 bird eye spot&#xff1b; 灰枯病&#xff1b; 白点&#xff1b; 炭…

ps怎么布尔运算多个图层合并?

我们经常使用Photoshop制作大型海报类&#xff0c;也可以用ps进行一些简单icon小图标的制作&#xff0c;这些icon图标多数应用在工具按钮上&#xff0c;比较小巧美观。但是对于ps对图形的操作经常会用到布尔运算的使用&#xff0c;今天小编就给大家详细讲解下ps布尔运算多个图层…

npm、yarn和pnpm

1 node_modules安装方式 在npm3之前是以嵌套结构方式安装依赖包&#xff0c;存在两个问题&#xff1a; 依赖路径太长多个包依赖一个相同包时&#xff0c;本地磁盘会存储多个相同的包 npm3和yarn使用扁平化结构&#xff0c;node_modules变成所有包放在同一层级 注意&#xf…

零代码ETL+聚水潭,实现销售出库单同步到数仓

一、聚水潭单据同步需求 聚水潭作为领先的电商ERP有很多快销、零售企业使用&#xff0c;同时作为以订单为核心的电商ERP系统企业还需要在本地配合其他业务系统一起使用完全整个业务的协同和财务结算&#xff0c;作为中大型企业随着业务发展企业会在聚水潭中沉淀大量的业务数据…

技术债务的深度探索:从累积到偿还的全景视角

1. 技术债务的定义与起源 什么是技术债务 技术债务&#xff0c;这个词汇在软件开发领域中经常被提及。但是&#xff0c;什么是技术债务呢&#xff1f;简单来说&#xff0c;技术债务是指为了短期的收益而做出的技术上的妥协&#xff0c;这些妥协可能会在未来导致更多的工作。它…

详解VAE(变分自编码器)

变分自编码器-VAE 前言一、AE&#xff08;auto-encoders&#xff09;-自编码器1.AE整体结构及公式推导2.AE的特点 二、 VAE(Variational auto-encoder)-变分自编码器1.VAE模型结构2.理论推导2.1变分下界&#xff08;Variational Lower bound&#xff09;/变分推理最小化KL散度最…

孤注一掷中的黑客技术

最近孤注一掷电影很火&#xff0c;诈骗团伙的骗术实在厉害&#xff0c;就连电影中的黑客潘生都未能幸免。电影中的陆经理说&#xff1a;不是我们坏&#xff0c; 是他们贪。这句话我觉得有一部分是对的&#xff0c;诈骗分子抓住了人的本性贪婪&#xff0c;才使得被骗的人逐步走向…

HTML概述

1.HTML介绍&规范 1.1介绍 HTML 指的是超文本标记/标签语言 (Hyper Text Markup Language) 普通的文本就是英文单词&#xff0c;英文字母一样的存在。 超文本的意思是有一些单词或字母&#xff0c;在网页浏览器的世界中被赋予了特殊的权利。 比如:我们都是普通人&#x…

Java进阶(6)——抢购问题中的数据不安全(非原子性问题) Java中的synchronize和ReentrantLock锁使用 死锁及其产生的条件

目录 引出场景&#xff1a;大量请求拥挤抢购事务的基本特征ACID线程安全的基本特征 加锁(java)synchronized锁ReentrantLock锁什么是可重入锁&#xff1f;如何保证可重入 滥用锁的代价&#xff1f;&#xff08;死锁&#xff09;死锁的四个必要条件死锁的案例 总结 引出 1.大量请…

pytorch安装VAE项目详解

安装VAE项目 一、 基本环境二、代码来源三、搭建conda环境四、下载数据集五、启动项目六、其他相关问题 一、 基本环境 工具版本号OSwin 11pycharm2020.1GPU3050 二、代码来源 github地址为&#xff1a; https://github.com/AntixK/PyTorch-VAE/blob/8700d245a9735640dda458d…

Mybatis-动态sql和分页

目录 一.什么是Mybatis动态分页 二.mybatis中的动态SQL 在BookMaaper.xml中写sql BookMapper BookBiz接口类 BookBizImpl实现接口类 demo测试类 ​编辑 测试结果 三.mybatis中的模糊查询 mybatis中的#与$有是什么区别 在BookMapper.xml里面建立三个模糊查询 ​编辑 …

校园人员进出入登记系统 微信小程序

利用eclipse编译器和微信开发者工具进行运行高校人员进出管理系统&#xff0c;用户需要登录完成之后才可以进行申请进出学校。管理员在登录系统之后具有的功能包括个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;申请出校管理&#xff0c;出校批准管理&#xff…

idea http request无法识别环境变量

问题描述 创建了环境变量文件 http-client.env.json&#xff0c;然后在*.http 文件中引用环境变量&#xff0c;运行 HTTP 请求无法读取环境变量文件中定义的变量。 事故现场 IDEA 版本&#xff1a;2020.2 2021.2 解决步骤 2020.2 版本环境变量无法读取 2021.2 版本从 2020.…

实景无人直播平台是这么开发出来的

标题&#xff1a;实景无人直播平台开发&#xff1a;探索专业性、思考深度与逻辑性的全新体验 随着科技的不断进步&#xff0c;实景无人直播平台成为了当今数字娱乐领域的热门话题。这种新型娱乐方式将虚拟与现实相结合&#xff0c;为用户带来了前所未有的视听体验。本文将探…

圆的反演 hdu 6097

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 题目大意 http://acm.hdu.edu.cn/showproblem.php?pid6097 有一个圆C&#xff0c;它的圆心是O(0,0), 半径是r。 在C内部或边界上有两点P和Q&#xff0c;OPOQ。 求解…

mysql 8.0 窗口函数 之 序号函数 与 sql server 序号函数 一样

sql server 序号函数 序号函数 ROW_NUMBER() 顺序排序RANK() 并列排序&#xff0c;会跳过重复的序号&#xff0c;比如序号为1&#xff0c;1&#xff0c;3DENSE_RANK() 并列排序&#xff0c;不会跳过重复的序号&#xff0c;比如 序号为 1&#xff0c;1&#xff0c;2 语法结构…