Spring(2)

作者: 百炼 | 来源:发表于2019-08-13 21:24 被阅读0次

    date
    [TOC]

    InputStreamSource 接口的实现层次

    public interface InputStreamSource {
        InputStream getInputStream() throws IOException;
    }
    
    public interface Resource extends InputStreamSource {
        boolean exists();
        boolean isReadable();
        boolean isOpen();
        URL getURL() throws IOException;
        URI getURI() throws IOException;
        File getFile() throws IOException;
        long contentLength() throws IOException;
        long lastModified() throws IOException;
        Resource createRelative(String relativePath) throws IOException;
        String getFilename();
        String getDescription();
    }
    

    Resource接口封闭底层资源,InputStreamSource接口只有一个得到InputStream的方法,所有实现都可以使用InputStream接收。InputStreamSource不管如何实现,具体实现交给了各个子类,给子类充分的自由。而真正处理资源的子类实现的是Resource接口,Resource接口声明了子类的一些约定方法。(接口其实就是一种约定)

    InputStreamSource的继承结构 Resource接口的实现类

    XmlBeanFactory 得到Bean

    idea安装SequencePlugin(直到写本篇文章时,SequencePlugin的version为1.3.0)

    idea查看调用的时序图 MyTestBean的时序图

    MyTestBean.java

    package edu.cninfo.vo;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    
    /**
     * @author chenxinwei
     * create 2019-08-12 15:53
     */
    public class MyTestBean {
        private String str = "This is my test Bean";
    
        public String getStr() {
            return str;
        }
    
        public void setStr(String str) {
            this.str = str;
        }
    
        @Override
        public String toString() {
            return super.toString();
        }
    
        public static void main(String[] args) {
            Resource resource = new ClassPathResource("myTestBean.xml", MyTestBean.class);
            BeanFactory bf = new XmlBeanFactory(resource);
            final MyTestBean bean = bf.getBean(MyTestBean.class);
            System.out.println(bean.getStr());
    
        }
    }
    

    myTestBean.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="myTestBean" class="edu.cninfo.vo.MyTestBean">
            <property name="str" value="hello"/>
        </bean>
    </beans>
    

    代码Resource resource = new ClassPathResource("myTestBean.xml", MyTestBean.class);使用实例时,将第一个参数使用StringUtils.cleanPath(param1)的结果给path属性赋值

    StringUtils.cleanPath 清理目录操作
    说明: 代码调试的时候看到StringUtils.cleanPath,搜索到工程中的单元测试类StringUtilsTest,定位到相应的测试方法下,看cleanPath的功能。

        public void testCleanPath() {
            assertEquals("mypath/myfile", StringUtils.cleanPath("mypath/myfile"));
            assertEquals("mypath/myfile", StringUtils.cleanPath("mypath\\myfile"));
            assertEquals("mypath/myfile", StringUtils.cleanPath("mypath/../mypath/myfile"));
            assertEquals("mypath/myfile", StringUtils.cleanPath("mypath/myfile/../../mypath/myfile"));
            assertEquals("../mypath/myfile", StringUtils.cleanPath("../mypath/myfile"));
            assertEquals("../mypath/myfile", StringUtils.cleanPath("../mypath/../mypath/myfile"));
            assertEquals("../mypath/myfile", StringUtils.cleanPath("mypath/../../mypath/myfile"));
            assertEquals("/../mypath/myfile", StringUtils.cleanPath("/../mypath/myfile"));
            assertEquals("/mypath/myfile", StringUtils.cleanPath("/a/:b/../../mypath/myfile"));
            assertEquals("file:///c:/path/to/the%20file.txt", StringUtils.cleanPath("file:///c:/some/../path/to/the%20file.txt"));
        }
    

    Spring 中使用Schema对xml进行校验

    在Java中如何启用Schema对XML文档校验

    相关文章

      网友评论

          本文标题:Spring(2)

          本文链接:https://www.haomeiwen.com/subject/gcnvjctx.html