Spring实战之Bean的后处理器操作示例

 更新时间:2019年12月13日 08:39:38   作者:cakincqm  
这篇文章主要介绍了Spring实战之Bean的后处理器操作,结合实例形式详细分析了Bean的后处理器相关配置、操作方法及使用注意事项,需要的朋友可以参考下

本文实例讲述了Spring实战之Bean的后处理器操作。分享给大家供大家参考,具体如下:

一 配置文件

<?xml version="1.0" encoding="GBK"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.springframework.org/schema/beans"
   xmlns:p="http://www.springframework.org/schema/p"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
   <!-- 配置2个普通Bean实例 -->
   <bean id="steelAxe" class="org.crazyit.app.service.impl.SteelAxe"/>
   <bean id="chinese" class="org.crazyit.app.service.impl.Chinese"
      init-method="init" p:axe-ref="steelAxe" p:name="依赖注入的值"/>
   <!-- 配置Bean后处理器,可以无需指定id属性 -->
   <bean id="bp" class="org.crazyit.app.util.MyBeanPostProcessor"/>
</beans>

二 接口

Axe

package org.crazyit.app.service;
public interface Axe
{
   public String chop();
}

Person

package org.crazyit.app.service;
public interface Person
{
   public void useAxe();
}

三 Bean

Chinese

package org.crazyit.app.service.impl;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.crazyit.app.service.*;
public class Chinese
  implements Person,InitializingBean
{
  private Axe axe;
  private String name;
  public Chinese()
  {
    System.out.println("Spring实例化主调bean:Chinese实例...");
  }
  public void setAxe(Axe axe)
  {
    this.axe = axe;
  }
  public void setName(String name)
  {
    System.out.println("Spring执行setName()方法注入依赖关系...");
    this.name = name;
  }
  public void useAxe()
  {
    System.out.println(name + axe.chop());
  }
  // 下面是两个生命周期方法
  public void init()
  {
    System.out.println("正在执行初始化方法 init...");
  }
  public void afterPropertiesSet() throws Exception
  {
    System.out.println("正在执行初始化方法 afterPropertiesSet...");
  }
}

SteelAxe

package org.crazyit.app.service.impl;
import org.crazyit.app.service.*;
public class SteelAxe
   implements Axe
{
   public SteelAxe()
   {
      System.out.println("Spring实例化依赖bean:SteelAxe实例...");
   }
   public String chop()
   {
      return "钢斧砍柴真快";
   }
}

四 Bean后处理器

package org.crazyit.app.util;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.crazyit.app.service.*;
import org.crazyit.app.service.impl.*;
public class MyBeanPostProcessor
  implements BeanPostProcessor
{
  /**
   * 对容器中的Bean实例进行后处理
   * @param bean 需要进行后处理的原Bean实例
   * @param beanName 需要进行后处理的Bean的配置id
   * @return 返回后处理完成后的Bean
   */
  public Object postProcessBeforeInitialization
    (Object bean , String beanName)
  {
    System.out.println("Bean后处理器在初始化之前对"
      + beanName + "进行增强处理...");
    // 返回的处理后的Bean实例,该实例就是容器中实际使用的Bean
    // 该Bean实例甚至可与原Bean截然不同
    return bean;
  }
  public Object postProcessAfterInitialization
    (Object bean , String beanName)
  {
    System.out.println("Bean后处理器在初始化之后对"
      + beanName + "进行增强处理...");
    // 如果该Bean是Chinese类的实例
    if (bean instanceof Chinese)
    {
      // 修改其name成员变量
      Chinese c = (Chinese)bean;
      c.setName("疯狂iOS讲义");
    }
    return bean;
  }
}

五 测试结果

Spring实例化主调bean:Chinese实例...
Spring实例化依赖bean:SteelAxe实例...
Bean后处理器在初始化之前对steelAxe进行增强处理...
Bean后处理器在初始化之后对steelAxe进行增强处理...
Spring执行setName()方法注入依赖关系...
Bean后处理器在初始化之前对chinese进行增强处理...
正在执行初始化方法 afterPropertiesSet...
正在执行初始化方法 init...
Bean后处理器在初始化之后对chinese进行增强处理...
Spring执行setName()方法注入依赖关系...
疯狂iOS讲义钢斧砍柴真快

更多关于java相关内容感兴趣的读者可查看本站专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java8处理List的双层循环问题

    Java8处理List的双层循环问题

    这篇文章主要介绍了Java8处理List的双层循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • mybatis使用foreach查询不出结果也不报错的问题

    mybatis使用foreach查询不出结果也不报错的问题

    这篇文章主要介绍了mybatis使用foreach查询不出结果也不报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java适配器模式如何让不兼容的接口变得兼容

    java适配器模式如何让不兼容的接口变得兼容

    这篇文章主要为大家介绍了java适配器模式如何让不兼容的接口变得兼容示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java实现字符串倒序输出的四种方法汇总

    Java实现字符串倒序输出的四种方法汇总

    这篇文章主要介绍了Java实现字符串倒序输出的四种方法汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java使用Arrays.sort()方法实现给对象排序

    Java使用Arrays.sort()方法实现给对象排序

    这篇文章主要介绍了Java使用Arrays.sort()方法实现给对象排序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java设计模式之解释器模式(Interpreter模式)介绍

    Java设计模式之解释器模式(Interpreter模式)介绍

    这篇文章主要介绍了Java设计模式之解释器模式(Interpreter模式)介绍,Interpreter定义:定义语言的文法,并且建立一个解释器来解释该语言中的句子,需要的朋友可以参考下
    2015-03-03
  • 线上Java程序占用CPU过高解决方案

    线上Java程序占用CPU过高解决方案

    这篇文章主要介绍了线上Java程序占用CPU过高解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • MyBatis延迟加载策略深入探究

    MyBatis延迟加载策略深入探究

    本文主要为大家详细介绍下mybatis的延迟加载,从原理上介绍下怎么使用、有什么好处能规避什么问题。感兴趣的小伙伴可以跟随小编一起学习一下
    2022-07-07
  • Spring cloud gateway工作流程原理解析

    Spring cloud gateway工作流程原理解析

    这篇文章主要介绍了Spring cloud gateway工作流程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Mybatis 如何批量删除数据的实现示例

    Mybatis 如何批量删除数据的实现示例

    这篇文章主要介绍了Mybatis 如何批量删除数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论