首页 > 其他分享 >配置Bean的后置处理器

配置Bean的后置处理器

时间:2025-01-15 19:57:19浏览次数:3  
标签:name 后置 Object bean String Bean 处理器 public Man

a. 在 spring 的 ioc 容器,可以配置 bean 的后置处理器

b. 该处理器/对象会在 bean 初始化方法调用前和初始化方法调用后被调用

c. 可以在后置处理器中编写自己的代码

1.首先还是创建一个类

package com.jhdo.spring.bean;

public class Man {
    private String name;

    public Man() {
    }

    public Man(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Man{" +
                "name='" + name + '\'' +
                '}';
    }
    public void init(){

    }
    public void desty(){

    }
}

2.在创建一个类

package com.jhdo.spring.bean;

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


public class ManG implements BeanPostProcessor {
    /**
     * 在 bean 初始化之后完成某些任务
     * @param bean : 就是 ioc 容器返回的 bean 对象, 如果这里被替换会修改,则返
                    回的 bean 对象也会被修改
     * @param beanName: 就是 ioc 容器配置的 bean 的名称
     * @return Object: 就是返回的 bean 对象
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("bean="+bean+"beanName="+beanName);
         /**因为这个在配置文件中全部都会应用所以要
         *加一个判断是否是这个类型的判断的运行类型用instanceof
          */
        if (bean instanceof Man){
            ((Man)bean).setName("帅哥");

        }
        return null;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return null;
    }
}

3.创建一个配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
     <bean class="com.jhdo.spring.bean.Man" id="man01"
        init-method="init" destroy-method="desty"
     >
         <property name="name" value="大帅哥"/>

</bean>
    <bean class="com.jhdo.spring.bean.Man" id="man02"
          init-method="init" destroy-method="desty"
    >
        <property name="name" value="小帅哥"/>

    </bean>
<!--    bean的后置处理器-->
    <bean class="com.jhdo.spring.bean.ManG" id="g"/>
</beans>

4.测试

   @Test
    public void susu(){
        ApplicationContext
                ioc = new ClassPathXmlApplicationContext("mans.xml");
        Man man01 = ioc.getBean("man01", Man.class);
        System.out.println(man01);
    }

下面是测试输出先输出的前两个是后置那个类还没改第一个name的结果 第三个是测试类里输出后置类改过的

 

其它说明

    1、怎么执行到这个方法?=> 使用 AOP(反射+动态代理+IO+容器+注解)

    2、有什么用?=> 可以对 IOC 容器中所有的对象进行统一处理 ,比如 日志处理/权限的校 验/安全的验证/事务管理. -初步体验案例: 如果类型是 Man 的统一改成 帅哥

3、针对容器的所有对象吗? 是的=>切面编程特点

4、后面我们会自己实现这个底层机制,这个是一个比较难理解的知识点, 不做过多的纠结,后面我会实现这个机制

标签:name,后置,Object,bean,String,Bean,处理器,public,Man
From: https://blog.csdn.net/m0_67442133/article/details/145161969

相关文章

  • Spring Bean生命周期管理:高手进阶的必修课
    SpringBean的生命周期就像一颗种子的成长过程,经历了从播种到发芽、成长、开花、结果,最终凋零的各个阶段。播种阶段(Bean定义与配置):就像农民将种子播撒在土壤中,为种子的生长做好准备。在Spring中,这是Bean定义的阶段,通过XML配置、注解或Java代码等方式,将Bean的定义信息注册到......
  • Vue 全局前置路由守卫 全局后置路由守卫
    一、位置src/router/index.jsconstrouter=newVueRouter({routes:[]})//这个地方写全局前置路由守卫或全局后置路由守卫exportdefaultrouter一、全局前置路由守卫1、时间:初始化时被调用,每次切换前被调用2、应用场景:控制登录用户的权限3、语......
  • pojo和javabean的区别
    POJO(PlainOldJavaObject)和JavaBean是Java编程中常用的术语,虽然它们有相似之处,但在概念和使用上有一些区别。以下是对它们的详细介绍。POJO(PlainOldJavaObject)定义POJO 是指一个普通的Java对象,没有特定的约束或要求。它不依赖于任何特定的框架或库。特点简单......
  • docker启动nacos报错: Nacos Server did not start because dumpservice bean constru
    一、docker启动nacos报错:mysql版本:8nacos版本:2.xNacosServerdidnotstartbecausedumpservicebeanconstructionfailure:NoDataSourcesetNacosisstarting,youcandockerlogsyourcontainer+exec/opt/java/openjdk/bin/java-XX:+UseConcMarkSweepGC-XX:+U......
  • SpringBooot3.4.x,Mybatis-Plus3.5.x报错:Invalid value type for attribute 'factoryBe
    SpringBooot3.4.x,Mybatis-Plus3.5.x报错:Invalidvaluetypeforattribute'factoryBeanObjectType':java.lang.String解决方案原因mybatis-plus-boot-starter中mybatis-spring版本与SpringBooot3不兼容方式1将mybatis-plus-boot-starter替换为mybatis-plus-spring-boot3-sta......
  • 电子电气架构 --- 中央处理器HPC及软件架构
    我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的豁达,往不幸上面喷“......
  • bean基础配置 -2025/1/2
    bean的name属性别名配置bean的scope配置默认情况下,Spring创建的bean对象都是单例的结论,使用bean的scope属性可以控制bean的创建是否为单例:singleton默认为单例prototype为非单例小结:实例化bean的三种方式构造方法(常用)......
  • 【自动化测试基础】Pytest前后置处理
    Pytest的前后置(固件、夹具)处理有一些初始化配置和测试之后的收尾,只需要处理一次,这个时候我们就要用到夹具。Pytest提供了以下几种setup和teardown方法:setup_function和teardown_function:用于每个测试函数setup_method和teardown_method:用于每个测试方法(类级别)setup_......
  • CPU-Z处理器检测工具 v2.13.0中文绿色单文件
    点击上方蓝字关注我前言CPU-Z是一个非常厉害的CPU检测小帮手。它能识别很多种类的CPU,而且打开和检测的速度都很快。这个工具能清楚地告诉我们关于CPU、主板、内存、显卡等硬件的详细信息,比如是哪个厂家生产的、处理器的名字、是怎么做出来的、封装技术怎么样,还有它们的运行频率......
  • spring 中 Bean 的生命周期
    spring中Bean的生命周期是怎样的?原文连环18问https://mp.weixin.qq.com/s/liWn2Dn91cmuiqHSxVO_fASpringBean生命周期大致分为4个阶段:1.「实例化」,实例化该Bean对象2.「填充属性」,给该Bean赋值3.「初始化」如果实现了Aware接口,会通过其接口获取容器......