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

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

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

      自定義屬性編輯器

      需求:將Customer中address屬性的值賦值給Address類中的每一個屬性

      package com.atguigu.selfEditor;
      
      public class Address {
      
          private String province;
          private String city;
          private String town;
      
          public String getProvince() {
              return province;
          }
      
          public void setProvince(String province) {
              this.province = province;
          }
      
          public String getCity() {
              return city;
          }
      
          public void setCity(String city) {
              this.city = city;
          }
      
          public String getTown() {
              return town;
          }
      
          public void setTown(String town) {
              this.town = town;
          }
      
          @Override
          public String toString() {
              return "Address{" +
                      "province='" + province + '\'' +
                      ", city='" + city + '\'' +
                      ", town='" + town + '\'' +
                      '}';
          }
      }
      
      package com.atguigu.selfEditor;
      
      public class Customer {
      
          private Address address;
      
          private String name;
      
          public Address getAddress() {
              return address;
          }
      
          public void setAddress(Address address) {
              this.address = address;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          @Override
          public String toString() {
              return "Customer{" +
                      "address=" + address +
                      ", name='" + name + '\'' +
                      '}';
          }
      }
      
      package com.atguigu.selfEditor;
      
      import java.beans.PropertyEditorSupport;
      
      public class AddressPropertyEditor extends PropertyEditorSupport {
          @Override
          public void setAsText(String text) throws IllegalArgumentException {
              String[] s = text.split("_");
              Address address = new Address();
              address.setProvince(s[0]);
              address.setCity(s[1]);
              address.setTown(s[2]);
      
              this.setValue(address);
          }
      
      }
      
      package com.atguigu.selfEditor;
      
      import org.springframework.beans.PropertyEditorRegistrar;
      import org.springframework.beans.PropertyEditorRegistry;
      
      public class AddressPropertyEditorRegistrar implements PropertyEditorRegistrar {
          @Override
          public void registerCustomEditors(PropertyEditorRegistry registry) {
              registry.registerCustomEditor(Address.class,new AddressPropertyEditor());
          }
      }
      
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:msb="http://www.mashibing.com/schema/user"
             xmlns:context="http://www.springframework.org/schema/context"
             xmlns:tx="http://www.springframework.org/schema/tx"
             xsi:schemaLocation="
                 http://www.springframework.org/schema/beans
                 http://www.springframework.org/schema/beans/spring-beans.xsd
                 http://www.springframework.org/schema/context
                 http://www.springframework.org/schema/context/spring-context.xsd
                 http://www.springframework.org/schema/tx
                 http://www.springframework.org/schema/tx/spring-tx.xsd
                 http://www.mashibing.com/schema/user http://www.mashibing.com/schema/user.xsd">
      
      
      
          <bean id="customer" class="com.atguigu.selfEditor.Customer">
              <property name="name" value="zhangsan"></property>
              <property name="address" value="河北省_邯鄲市_武安市"></property>
          </bean>
          <!--第一種配置方式-->
      <!--    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">-->
      <!--        <property name="propertyEditorRegistrars">-->
      <!--            <list>-->
      <!--                <bean class="com.atguigu.selfEditor.AddressPropertyEditorRegistrar"></bean>-->
      <!--            </list>-->
      <!--        </property>-->
      <!--    </bean>-->
          <!--第二種配置方式-->
          <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
              <property name="customEditors">
                  <map>
                      <entry key="com.atguigu.selfEditor.Address">
                          <value>com.atguigu.selfEditor.AddressPropertyEditor</value>
                      </entry>
                  </map>
              </property>
          </bean>
      </beans>
      
      package com.atguigu;
      
      /**
       * Hello world!
       */
      public class App {
          public static void main(String[] args) {
              ApplicationContext context = new ClassPathXmlApplicationContext("selfEditor.xml");
              Customer user = (Customer)context.getBean(Customer.class);
              System.out.println(user);
      
          }
      }
      output:
      Customer{address=Address{province='河北省', city='邯鄲市', town='武安市'}, name='zhangsan'}
      

      來源思路:

      @Override
      public void refresh() throws BeansException, IllegalStateException {
          synchronized (this.startupShutdownMonitor) {
             // Prepare this context for refreshing.
             prepareRefresh();
      
             // Tell the subclass to refresh the internal bean factory.
             ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
      
             // Prepare the bean factory for use in this context.
             // 點進去
             prepareBeanFactory(beanFactory);
      
             try {
                // Allows post-processing of the bean factory in context subclasses.
                postProcessBeanFactory(beanFactory);
      
                // Invoke factory processors registered as beans in the context.
                invokeBeanFactoryPostProcessors(beanFactory);
      
                // Register bean processors that intercept bean creation.
                registerBeanPostProcessors(beanFactory);
      
                // Initialize message source for this context.
                initMessageSource();
      
                // Initialize event multicaster for this context.
                initApplicationEventMulticaster();
      
                // Initialize other special beans in specific context subclasses.
                onRefresh();
      
                // Check for listener beans and register them.
                registerListeners();
      
                // Instantiate all remaining (non-lazy-init) singletons.
                finishBeanFactoryInitialization(beanFactory);
      
                // Last step: publish corresponding event.
                finishRefresh();
             }
      
             catch (BeansException ex) {
                if (logger.isWarnEnabled()) {
                   logger.warn("Exception encountered during context initialization - " +
                         "cancelling refresh attempt: " + ex);
                }
      
                // Destroy already created singletons to avoid dangling resources.
                destroyBeans();
      
                // Reset 'active' flag.
                cancelRefresh(ex);
      
                // Propagate exception to caller.
                throw ex;
             }
      
             finally {
                // Reset common introspection caches in Spring's core, since we
                // might not ever need metadata for singleton beans anymore...
                resetCommonCaches();
             }
          }
      }
      
      protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {
          // Tell the internal bean factory to use the context's class loader etc.
          beanFactory.setBeanClassLoader(getClassLoader());
          beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));
          // 主要來源于這一行代碼
          beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));
      
          // Configure the bean factory with context callbacks.
          beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
          beanFactory.ignoreDependencyInterface(EnvironmentAware.class);
          beanFactory.ignoreDependencyInterface(EmbeddedValueResolverAware.class);
          beanFactory.ignoreDependencyInterface(ResourceLoaderAware.class);
          beanFactory.ignoreDependencyInterface(ApplicationEventPublisherAware.class);
          beanFactory.ignoreDependencyInterface(MessageSourceAware.class);
          beanFactory.ignoreDependencyInterface(ApplicationContextAware.class);
      
          // BeanFactory interface not registered as resolvable type in a plain factory.
          // MessageSource registered (and found for autowiring) as a bean.
          beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);
          beanFactory.registerResolvableDependency(ResourceLoader.class, this);
          beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
          beanFactory.registerResolvableDependency(ApplicationContext.class, this);
      
          // Register early post-processor for detecting inner beans as ApplicationListeners.
          beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));
      
          // Detect a LoadTimeWeaver and prepare for weaving, if found.
          if (beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {
             beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));
             // Set a temporary ClassLoader for type matching.
             beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));
          }
      
          // Register default environment beans.
          if (!beanFactory.containsLocalBean(ENVIRONMENT_BEAN_NAME)) {
             beanFactory.registerSingleton(ENVIRONMENT_BEAN_NAME, getEnvironment());
          }
          if (!beanFactory.containsLocalBean(SYSTEM_PROPERTIES_BEAN_NAME)) {
             beanFactory.registerSingleton(SYSTEM_PROPERTIES_BEAN_NAME, getEnvironment().getSystemProperties());
          }
          if (!beanFactory.containsLocalBean(SYSTEM_ENVIRONMENT_BEAN_NAME)) {
             beanFactory.registerSingleton(SYSTEM_ENVIRONMENT_BEAN_NAME, getEnvironment().getSystemEnvironment());
          }
      }
      

      posted on 2025-09-23 11:35  ~碼鈴薯~  閱讀(7)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产色无码专区在线观看| 久久三级国内外久久三级| 精品国产欧美一区二区三区在线| 夜鲁夜鲁很鲁在线视频 视频| 粗壮挺进人妻水蜜桃成熟| 亚洲人成日韩中文字幕不卡| 久久午夜无码免费| 乱妇乱女熟妇熟女网站| 思思99热精品在线| 亚洲综合精品一区二区三区| 精品久久久无码中文字幕| 国产免费网站看v片元遮挡| 国产精品国产自产拍在线| 亚洲av二区伊人久久| 99福利一区二区视频| 久久99九九精品久久久久蜜桃| 亚洲熟妇自偷自拍另类| 亚洲人成网站18禁止无码| 国产精品99久久久久久www| 国产午夜A理论毛片| 左云县| 国产一级r片内射免费视频| 亚洲自偷自拍另类小说| 美女自卫慰黄网站| 天天爽夜夜爱| 国产精品黑色丝袜在线观看| 亚洲精品有码在线观看| 精品自拍自产一区二区三区| 国产最大成人亚洲精品| 玩两个丰满老熟女久久网| 深夜在线观看免费av| 永久免费无码网站在线观看| 狠狠干| 色婷婷综合久久久久中文字幕| 中文有无人妻vs无码人妻激烈| 欧美视频二区欧美影视| 亚洲精品一区久久久久一品av| 国产成人女人在线观看| 精品人妻av中文字幕乱| 国产漂亮白嫩美女在线观看 | 亚洲国产长腿丝袜av天堂|