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

 更新时间:2019年12月17日 09:26:41   作者:cakincqm  
这篇文章主要介绍了Spring实战之容器后处理器操作,结合实例形式分析了spring容器后处理器配置、使用操作技巧与相关注意事项,需要的朋友可以参考下

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

一 配置文件

<?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">
   <!-- 配置两个简单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:name="孙悟空" p:axe-ref="steelAxe"/>
   <!-- 配置容器后处理器 -->
   <bean id="beanFactoryPostProcessor"
      class="org.crazyit.app.util.MyBeanFactoryPostProcessor"/>
</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 "钢斧砍柴真快";
   }
}

四 容器后处理器

package org.crazyit.app.util;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
public class MyBeanFactoryPostProcessor
  implements BeanFactoryPostProcessor
{
  /**
   * 重写该方法,对Spring进行后处理。
   * @param beanFactory Spring容器本身
   */
  public void postProcessBeanFactory(
    ConfigurableListableBeanFactory beanFactory)
    throws BeansException
  {
    System.out.println("程序对Spring所做的BeanFactory的初始化没有改变...");
    System.out.println("Spring容器是:" + beanFactory);
  }
}

五 测试类

package lee;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.crazyit.app.service.*;
public class BeanTest
{
  public static void main(String[] args)
  {
    // 以ApplicationContex作为Spring容器
    // 它会自动注册容器后处理器、Bean后处理器
    ApplicationContext ctx = new
      ClassPathXmlApplicationContext("beans.xml");
    Person p = (Person)ctx.getBean("chinese");
    p.useAxe();
  }
}

六 测试结果

程序对Spring所做的BeanFactory的初始化没有改变...
Spring容器是:org.springframework.beans.factory.support.DefaultListableBeanFactory@6a024a67: defining beans  [steelAxe,chinese,beanFactoryPostProcessor]; root of factory  hierarchy
Spring实例化依赖bean:SteelAxe实例...
Spring实例化主调bean:Chinese实例...
Spring执行setName()方法注入依赖关系...
正在执行初始化方法  afterPropertiesSet...
正在执行初始化方法   init...
孙悟空钢斧砍柴真快

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

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

相关文章

  • spring @schedule注解如何动态配置时间间隔

    spring @schedule注解如何动态配置时间间隔

    这篇文章主要介绍了spring @schedule注解如何动态配置时间间隔,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring gateway + Oauth2实现单点登录及详细配置

    Spring gateway + Oauth2实现单点登录及详细配置

    gateway是基于 WebFlux的响应式编程框架,所以在使用securityConfig时采用的注解是@EnableWebFluxSecurity,接下来通过本文给大家介绍Spring gateway + Oauth2实现单点登录及详细配置,感兴趣的朋友一起看看吧
    2021-09-09
  • SpringBoot配置全局异常处理器捕获异常详解

    SpringBoot配置全局异常处理器捕获异常详解

    spring-boot统一异常捕获,异常时相对于return的一种退出机制,可以由系统触发,下面这篇文章主要给大家介绍了关于SpringBoot配置全局异常处理器捕获异常的相关资料,需要的朋友可以参考下
    2023-04-04
  • maven插件spring-boot-starter-tomcat的使用方式

    maven插件spring-boot-starter-tomcat的使用方式

    这篇文章主要介绍了maven插件spring-boot-starter-tomcat的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • java 序列化与反序列化的实例详解

    java 序列化与反序列化的实例详解

    这篇文章主要介绍了java 序列化与反序列化的实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • MyBatisPlus查询投影与查询条件详细讲解

    MyBatisPlus查询投影与查询条件详细讲解

    这篇文章主要介绍了MyBatisPlus DQL编程控制中的查询投影、查询条件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java Socket编程(二) Java面向连接的类

    Java Socket编程(二) Java面向连接的类

    Java Socket编程(二) Java面向连接的类...
    2006-12-12
  • java 实现图片圆角处理、背景透明化

    java 实现图片圆角处理、背景透明化

    这篇文章主要介绍了java 实现图片圆角处理、背景透明化,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java多线程文件下载器的实现

    java多线程文件下载器的实现

    本文主要介绍了java多线程文件下载器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下
    2021-07-07

最新评论