<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

       首先是BeanFactory和FactoryBean的區別:

      • FactoryBean:是一個Java Bean,但是它是一個能生產對象的工廠Bean,它的實現和工廠模式及修飾器模式很像。比如下:我們把bean比作豬,那么FactoryBean可以算是一個母豬,首先它本身也是一只豬,但它能夠下小豬。
      • BeanFactory:這就是一個Factory,是一個IOC容器或者叫對象工廠,它里面存著很多的bean。還用上面那個比如:如果bean是豬,那么它可以理解成豬圈,豬圈里面有很

      FactoryBean的核心就在于通過getObject方法可以獲取的是它所生產的對象

      實現FactoryBean 必須實現接口的3個方法:getObject、getObjectType、isSingleton

      使用FactoryBean的場景有兩個:1、創建代理對象 2、通過xml配置方式比較繁瑣或有難度,那么可以通過FactoryBean 在java代碼里面配置bean

      網上找了兩個例子,說明這兩點

      1.創建代理對象的例子:

      ZFFactoryBean 
       1 package com.spring.factorybean;
       2 
       3 import java.lang.reflect.InvocationHandler;
       4 import java.lang.reflect.Method;
       5 import java.lang.reflect.Proxy;
       6 
       7 import org.springframework.beans.factory.DisposableBean;
       8 import org.springframework.beans.factory.FactoryBean;
       9 import org.springframework.beans.factory.InitializingBean;
      10 
      11 public class ZFFactoryBean implements FactoryBean<Object>, InitializingBean, DisposableBean {
      12 
      13     // 被代理對象實現的接口名(在使用Proxy時需要用到,用于決定生成的代理對象類型)
      14     private String interfaceName;
      15 
      16     // 被代理的對象
      17     private Object target;
      18 
      19     // 生成的代理對象
      20     private Object proxyObj;
      21 
      22     public void destroy() throws Exception {
      23         System.out.println("distory...");
      24     }
      25 
      26     public void afterPropertiesSet() throws Exception {
      27 
      28         proxyObj = Proxy.newProxyInstance(this.getClass().getClassLoader(),
      29                                           new Class[] { Class.forName(interfaceName) }, new InvocationHandler() {
      30 
      31                                               public Object invoke(Object proxy, Method method, Object[] args)
      32                                                                                                               throws Throwable {
      33                                                   System.out.println("method:" + method.getName());
      34                                                   System.out.println("Method before...");
      35                                                   Object result = method.invoke(target, args);
      36                                                   System.out.println("Method after...");
      37                                                   return result;
      38                                               }
      39                                           });
      40 
      41         System.out.println("afterPropertiesSet");
      42     }
      43 
      44     public Object getObject() throws Exception {
      45         System.out.println("getObject");
      46         return proxyObj;
      47     }
      48 
      49     public Class<?> getObjectType() {
      50         return proxyObj == null ? Object.class : proxyObj.getClass();
      51     }
      52 
      53     public boolean isSingleton() {
      54         return true;
      55     }
      56 
      57     public String getInterfaceName() {
      58         return interfaceName;
      59     }
      60 
      61     public void setInterfaceName(String interfaceName) {
      62         this.interfaceName = interfaceName;
      63     }
      64 
      65     public Object getTarget() {
      66         return target;
      67     }
      68 
      69     public void setTarget(Object target) {
      70         this.target = target;
      71     }
      72 
      73 }

      PersonService 和 PersonServiceImpl的代碼此處省略

      xml配置:

      1  <bean id="personService" class="com.spring.service.impl.PersonServiceImpl" scope="prototype">
      2                <property name="name" value="is_zhoufeng" />
      3        </bean>  
      4        
      5        <bean id="zfPersonService" class="com.spring.factorybean.ZFFactoryBean">
      6             <property name="interfaceName" value="com.spring.service.PersonService" />
      7             <property name="target"  ref="personService"/>
      8        </bean>

      用法:

       1    @Test
       2     public void test06() {
       3         PersonService ps = context.getBean("zfPersonService", PersonService.class);
       4 
       5         ps.sayHello();
       6 
       7         String name = ps.getName();
       8 
       9         System.out.println(name);
      10     }

      2.配置較為復雜的bean

      Person類,get set省略

      1 public class Person {  
      2     private String name;  
      3     private String address;  
      4     private int age;  
      5 }  

      如果用xml配置,如下,會比較麻煩:

      1 <bean id="personBean" class="com.gh.MavenTest.Person">  
      2     <property name="name" value="gh1" />  
      3     <property name="address" value="address1" />  
      4     <property name="age" value="28" />  
      5 </bean>  

      換成FactoryBean的方式配置:

       1 public class PersonFactoryBean implements FactoryBean<Person>{  
       2       
       3     private String personInfo;  
       4       
       5     public Person getObject() throws Exception {  
       6         Person person =  new  Person () ;      
       7         String []  infos =  personInfo.split ( "," ) ;  
       8         person.setName(infos[0]);  
       9         person.setAddress(infos[1]);  
      10         person.setAge(Integer.parseInt(infos[2]));  
      11         return person;  
      12     }  
      13   
      14     public Class<Person> getObjectType() {  
      15         return Person.class;  
      16     }  
      17   
      18     public boolean isSingleton() {  
      19         return true;  
      20     }  
      21 }  

      xml再配置一下:

      1 <bean id="personFactory" class="com.hik.MavenTest.PersonFactory">  
      2     <property name="personInfo" value="gh2,address2,22"></property>  
      3 </bean> 

      那么這個時候我們getBean("personFactory")得到的就是Person對象而不是PersonFactoryBean對象

      如果要取到PersonFactoryBean這個bean, 在beanName前面加上&,即getBean("&personFactory")

      spring自帶了不少FactoryBean的實現,最下面是我們所在的公司的實現

       

      具體使用的時候,還可以用FactoryBean創建多個bean

      1 <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
      2 <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
      3 <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
      4 <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
      5 <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />

       

      posted on 2017-07-06 21:03  xuqiyu  閱讀(297)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧洲尺码日本尺码专线美国又| 日本中文字幕不卡在线一区二区| 澳门永久av免费网站| 精品久久久久久亚洲综合网| 国产亚洲精品久久久久久久久| 亚洲成A人片在线观看的电影| 闸北区| 竹菊影视欧美日韩一区二区三区四区五区 | 性无码一区二区三区在线观看 | 男女性高爱潮免费网站| 国产日韩AV免费无码一区二区三区| 撕开奶罩揉吮奶头高潮AV| 欧美奶涨边摸边做爰视频| 日韩伦人妻无码| 色综合天天综合天天综| 亚洲一区中文字幕第十页| 国产精品国产高清国产av| 亚洲中文字幕人成影院| 久热这里有精彩视频免费| 亚洲自在精品网久久一区| 另类专区一区二区三区| 波多野结衣久久一区二区| 99久久国产一区二区三区| 国产亚洲精品成人aa片新蒲金| 中文人妻熟妇乱又伦精品| 久久美女夜夜骚骚免费视频| 国产超碰无码最新上传| 一本一道av无码中文字幕麻豆| 亚洲第一无码专区天堂| 久久婷婷丁香五月综合五| 精品国产乱码久久久久久影片| 亚洲国产成熟视频在线多多 | 内射一区二区三区四区| 国产精品SM捆绑调教视频| 麻豆av一区二区天美传媒| 最近中文字幕免费手机版| 久久久久久久久久久免费精品| 少妇人妻偷人精品系列| 亚洲国产av区一区二| 精品黄色av一区二区三区| 绯色蜜臀av一区二区不卡|