zoukankan      html  css  js  c++  java
  • Spring中JavaBean的预处理和后处理

    首先要知道在Spring中BeanFactory

    在BeanFactory中JavaBean的生命周期分为实例化、初始化、使用和销毁四个阶段

    实例化:调用BeanFactory的getBean()方法,在中期会创建JavaBean的实例对象,并根据指定的XML自动收集JavaBean的定义信息,通过<constructor-arg>标签为JavaBean构造方法阐述初始化JavaBean的实例对象

    初始化:容器按照JavaBean的定义初始化JavaBean的所有属性和依赖关系。

    使用:可直接通过getBean()方法获得并使用JavaBean的实例对象。

    销毁:关闭容器时会销毁所有的javabean

    JavaBean的预处理和后处理。通过实现BeanPostProcessor接口来对JavaBean是初始化之前调用还是初始化之后调用

    例如:在本例子中定义了一个TempWorker类记录员工信息。LogFile中存储所有员工信息保存在workList中。在applicationContext.xml中在workList加入了3个worker。其中worker1赋值完整。如果不创建BeanPostProcessorExample运行之后未赋值的值为空。创建了BeanPostProcessorExample之后可以在logFile这个bean实例化之后根据我们的代码把为赋值的地方赋值

    TempWorker:

     1 package com;
     2 
     3 public class TempWorker implements Worker{
     4     private String name;
     5     private String workType;
     6     private int pay;
     7     
     8     public String getName() {
     9         return name;
    10     }
    11 
    12     public void setName(String name) {
    13         this.name = name;
    14     }
    15 
    16     public String getWorkType() {
    17         return workType;
    18     }
    19 
    20     public void setWorkType(String workType) {
    21         this.workType = workType;
    22     }
    23     
    24     
    25     
    26 
    27     public int getPay() {
    28         return pay;
    29     }
    30 
    31     public void setPay(int pay) {
    32         this.pay = pay;
    33     }
    34 
    35     public void printInfo() {
    36         System.out.println("\nName:"+name);
    37         System.out.println("Work Type:"+workType);
    38         System.out.println("Pay:"+pay);
    39 
    40 
    41     }
    42 
    43 }

    logFile:

     1 package com;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 public class logFile {
     7     private List workList=new ArrayList();
     8 
     9     public List getWorkList() {
    10         return workList;
    11     }
    12 
    13     public void setWorkList(List workList) {
    14         this.workList = workList;
    15     }
    16     
    17 }

    applicationContext:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
     3 "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
     4 <beans>
     5     <bean id="log" class="com.logFile">
     6         <property name="workList">
     7             <list>
     8                 <ref bean="worker1"/>
     9                 <ref bean="worker2"/>
    10                 <ref bean="worker3"/>
    11             </list>
    12         </property>
    13     </bean>
    14     <bean id="worker1" class="com.TempWorker">
    15         <property name="name">
    16             <value>Michle</value>
    17         </property>
    18         <property name="pay">
    19             <value>1000</value>
    20         </property>
    21         
    22     </bean>
    23     <bean id="worker2" class="com.TempWorker">
    24         <property name="name">
    25             <value>Michle</value>
    26         </property>
    27         <property name="workType">
    28             <value>Regular</value>
    29         </property>
    30         <property name="pay">
    31             <value>8000</value>
    32         </property>
    33         
    34     </bean>
    35     <bean id="worker3" class="com.TempWorker">
    36         <property name="name">
    37             <value>Lucy</value>
    38         </property>
    39         
    40         
    41     </bean>
    42     
    43 </beans>

    test:

     1 package com;
     2 import java.util.Iterator;
     3 import java.util.List;
     4 
     5 import org.springframework.beans.factory.xml.XmlBeanFactory;
     6 import org.springframework.context.ApplicationContext;
     7 import org.springframework.context.support.ClassPathXmlApplicationContext;
     8 import org.springframework.context.support.FileSystemXmlApplicationContext;
     9 import org.springframework.core.io.ClassPathResource;
    10 import org.springframework.core.io.Resource;
    11 
    12 import com.Worker;
    13 import com.logFile;
    14 
    15 
    16 public class test {
    17     public static void main(String args[]){
    18         ApplicationContext ctx=new  FileSystemXmlApplicationContext("src/applicationContext.xml");
    19         //XmlBeanFactory bf=new XmlBeanFactory(rs);
    20         logFile log=(logFile) ctx.getBean("log");
    21         List workerlist=log.getWorkList();
    22         System.out.println("All workers:");
    23         Iterator it=workerlist.iterator();
    24         while(it.hasNext()){
    25             Worker worker=(Worker) it.next();
    26             worker.printInfo();
    27         }
    28         
    29     }
    30 }

    Result:

    加入BeanPostProcessorExample

     1 package com;
     2 
     3 import org.springframework.beans.BeansException;
     4 import org.springframework.beans.factory.config.BeanPostProcessor;
     5 
     6 public class BeanPostProcessorExample implements BeanPostProcessor{
     7 
     8     public Object postProcessAfterInitialization(Object bean, String beanName)
     9             throws BeansException {
    10          if(bean instanceof TempWorker){
    11              TempWorker tempworker=(TempWorker) bean;
    12              if(tempworker.getPay()<=800){
    13                  tempworker.setPay(800);
    14              }
    15              if(tempworker.getWorkType()==null||tempworker.getWorkType().equals("")){
    16                  tempworker.setWorkType("Temp");
    17              }
    18              return tempworker;
    19          }
    20         return bean;
    21     }
    22 
    23     public Object postProcessBeforeInitialization(Object bean, String beanName)
    24             throws BeansException {
    25         // TODO Auto-generated method stub
    26         return bean;
    27     }
    28 
    29 }

    test:

     1 package com;
     2 
     3 import java.util.Iterator;
     4 import java.util.List;
     5 
     6 import org.springframework.beans.factory.config.BeanPostProcessor;
     7 import org.springframework.beans.factory.xml.XmlBeanFactory;
     8 import org.springframework.context.ApplicationContext;
     9 import org.springframework.context.support.ClassPathXmlApplicationContext;
    10 import org.springframework.context.support.FileSystemXmlApplicationContext;
    11 import org.springframework.core.io.ClassPathResource;
    12 import org.springframework.core.io.Resource;
    13 
    14 public class TakeIn {
    15     public static void main(String args[]){
    16         Resource rs = new ClassPathResource("applicationContext.xml");
    17         XmlBeanFactory bf = new XmlBeanFactory(rs);
    18         BeanPostProcessorExample bp=new BeanPostProcessorExample();
    19         bf.addBeanPostProcessor(bp);
    20         logFile log=(logFile) bf.getBean("log");
    21         List workerlist=log.getWorkList();
    22         System.out.println("All workers:");
    23         Iterator it=workerlist.iterator();
    24         while(it.hasNext()){
    25             Worker worker=(Worker) it.next();
    26             worker.printInfo();
    27         }
    28     }
    29 }

    结果:

  • 相关阅读:
    github替代品
    【推荐】通用全面的APP测试用例设计
    Jmeter 性能测试,完整入门篇
    2020年,有哪些特别好用的 app 测试工具?
    如何做好Web端性能测试?
    如何做Web服务的性能测试?
    Office 各版本批量授权(VOL)和激活方法
    django中引用bootstrap的几种方式
    list类型数据执行效率测试
    Linux安装python3环境
  • 原文地址:https://www.cnblogs.com/doublesong/p/2632211.html
Copyright © 2011-2022 走看看