zoukankan      html  css  js  c++  java
  • Spring自定义属性编辑器及原理解释.md

    bean的自动装配解释

    • 之前有构造注入和设值注入,但是也是手动的

    • autowire =”byname”

    • 这里要注意自动装配的话,不能装配特殊类型,比如日期类型(要用自定义属性编辑器

    手动解决方式

    我们知道的普通是这样解决的:

    <bean id="myBean" class="com.bean.myBean">
            <property name="date" ref="date"/>
        </bean>
        <bean id="date" class="java.util.Date">
        </bean>  

    自动注入解决方式

    但是要自动注入要用自定义属性编辑器

               原理:类似于拦截器,当遇到map中需要过滤的类型时,就按照所配置的属性编辑器处理注入的值,这个值的类型是String类型的,由属性编辑器来决定转换类型。
    
        <!--自定义属性编辑    -->
        <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">   <!--配置一个自定义编辑器-->  
            <property name="customEditors">
                <map>  
                    <entry key="java.util.Date">  
                        <bean class="com.bean.DateTest">  
                            <property name="date" value="yyyy-mm-dd" />  <!--注入需要转换的格式,注入到DateTest 中-->  
                        </bean>  
                    </entry>  
                </map>  
            </property>  
        </bean>  
    
        <bean id="md" class="com.bean.myBean">  
            <property name="date">  
                <value>2011-1-1</value>  
            </property>  
        </bean>  
    
    package com.bean;
    import java.beans.PropertyEditorSupport;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    public class DateTest extends PropertyEditorSupport{
        private String date;//表示格式,是自动注入的
        public String getDate() {
            return date;
        }
        public void setDate(String date) {
            this.date = date;
        }
    
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            System.out.println("text:"+text);
             SimpleDateFormat sdf = new SimpleDateFormat(date);
            Date date = null;
            try {
                date = sdf.parse(text);//传的是字符串,解析为Date数据
                this.setValue(date);  
                } catch (ParseException e) {  
                    e.printStackTrace();  
                }  
    
        }
    
    }
  • 相关阅读:
    Vue中使用axios时post传参之请求体带参
    MyBatisPlus常用功能之简介
    常用命令一二三之练习题
    常用命令之三
    常用命令之二
    常用命令之一
    阿里云之轻量文件分布式服务器-fastDFS
    js三座大山之三:异步和单线程
    js三座大山之二:作用域和闭包
    run build时内存溢出打包失败的解决办法
  • 原文地址:https://www.cnblogs.com/pzqu/p/9457635.html
Copyright © 2011-2022 走看看