• 吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Spring_BeanPostProcessor


    <?xml version="1.0" encoding="GBK"?>
    <project name="spring" basedir="." default="">
        <property name="src" value="src"/>
        <property name="dest" value="classes"/>
    
        <path id="classpath">
            <fileset dir="../../lib">
                <include name="**/*.jar"/>
            </fileset>
            <pathelement path="${dest}"/>
        </path>
    
        <target name="compile" description="Compile all source code">
            <delete dir="${dest}"/>
            <mkdir dir="${dest}"/>
            <copy todir="${dest}">
                <fileset dir="${src}">
                    <exclude name="**/*.java"/>
                </fileset>        
            </copy>
            <javac destdir="${dest}" debug="true" includeantruntime="yes"
                deprecation="false" optimize="false" failonerror="true">
                <src path="${src}"/>
                <classpath refid="classpath"/>
                <compilerarg value="-Xlint:deprecation"/>
            </javac>
        </target>
    
        <target name="run" description="Run the main class" depends="compile">
            <java classname="lee.BeanTest" fork="yes" failonerror="true">
                <classpath refid="classpath"/>
            </java>
        </target>
    
    </project>
    <?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>
    package lee;
    
    import org.springframework.core.io.*;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import org.crazyit.app.service.*;
    import org.crazyit.app.util.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public class BeanTest
    {
        public static void main(String[] args)throws Exception
        {
            // 以类加载路径下的beans.xml文件来创建Spring容器
    //        ApplicationContext ctx = new
    //            ClassPathXmlApplicationContext("beans.xml");
    //        Person p = (Person)ctx.getBean("chinese");
    
            // 搜索类加载路径下的beans.xml文件创建Resource对象
            Resource isr = new ClassPathResource("beans.xml");
            // 创建默认的BeanFactory容器
            DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
            // 让默认的BeanFactory容器加载isr对应的XML配置文件
            new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);
            // 获取容器中的Bean后处理器
            BeanPostProcessor bp = (BeanPostProcessor)beanFactory.getBean("bp");
            // 注册Bean后处理器
            beanFactory.addBeanPostProcessor(bp);
            Person p = (Person)beanFactory.getBean("chinese");
    
            p.useAxe();
        }
    }
    package org.crazyit.app.service;
    
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public interface Axe
    {
        public String chop();
    }
    package org.crazyit.app.service;
    
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public interface Person
    {
        public void useAxe();
    }
    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.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    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...");
        }
    }
    package org.crazyit.app.service.impl;
    
    import org.crazyit.app.service.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    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.BeanPostProcessor;
    
    import org.crazyit.app.service.*;
    import org.crazyit.app.service.impl.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    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;
        }
    }
  • 相关阅读:
    yolov3计算mAP
    ESP32 ADC的坑
    DCNv2编译过程报错:error: identifier "THCudaBlas_SgemmBatched" is undefined
    Arduino在Lib中输出调试参数
    ESP32获取WT901CTTL/232四元数
    常用公共前端CDN库
    js / php 网站底部版权文字自动改变年份
    以管理员身份在当前目录打开命令行窗口
    【JavaScript】提取字符串里的分数,及计算平均分并与平均分比较输出
    添加谷歌翻译到你的网站
  • 原文地址:https://www.cnblogs.com/tszr/p/12372053.html
Copyright © 2020-2023  润新知