zoukankan      html  css  js  c++  java
  • Ⅸ.spring的点点滴滴--IObjectFactory与IFactoryObject的杂谈

    承接上文

    ObjectFactory与IFactoryObject的杂谈


    .net篇(环境为vs2012+Spring.Core.dll v1.31

        public class parent    {
            public string Name { get; set; }
            public int Age { get; set; }
        }
        public class CustomFactory :
        Spring.Objects.Factory.IFactoryObject
        {
            public object GetObject(){
                return "1";
            }
            public bool IsSingleton{
                get { return false; }
            }
            public Type ObjectType{
                get { return typeof(string); }
            }
        }
      <object id="p1" type="SpringBase.parent,SpringBase">
        <property name="Name" value="cnljli" />
        <property name="Age" value="1"/>
      </object>
      <object id="p2" type="SpringBase.parent,SpringBase" singleton="false" >
        <property name="Name" value="cnljli" />
        <property name="Age" value="1"/>
      </object>
      <object id="customFac" type="SpringBase.CustomFactory, SpringBase"/>
    1. 可以直接调用xml配置文件来返回一个工厂
       Spring.Core.IO.IResource input = new Spring.Core.IO.FileSystemResource("factory.xml");
               Spring.Objects.Factory.Xml.XmlObjectFactory factory =
               new Spring.Objects.Factory.Xml.XmlObjectFactory(input);
    2. 可以通过xml文件里面的配置为程序的实例注入, 第一个参数为实例的引用地址,第二个参数为xml文件的id
       parent ioc = new parent();
       factory.ConfigureObject(ioc, "p1");

    java篇(环境为Maven+Jdk1.7+IntelliJ IDEA 12.1.4

    package springdemo;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.*;
    public class Parent {
        private String name;
        private Integer age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
    }
    class  CustomFactory implements FactoryBean<String>{
        @Override
        public String getObject() throws Exception {
            return "1";
        }
        @Override
        public Class<?> getObjectType() {
            return String.class;
        }
        @Override
        public boolean isSingleton() {
            return false;
        }
    }
        <bean id="p1" class="springdemo.Parent">
            <property name="name" value="cnljli-p1" />
            <property name="age" value="1" />
        </bean>
        <bean id="p2" class="springdemo.Parent" singleton="false">
            <property name="name" value="cnljli-p2" />
            <property name="age" value="1" />
        </bean>
        <bean id="customFac" class="springdemo.CustomFactory" />

    javaCsharp的共同点

    1. 如果没有显式指定,对象的布署模式默认为singleton,即当修改一个实例化,再次通过id获取, 为修改后的实例
    2. 实现IFactoryObject|FactoryBean接口的对象也可以获取这个工厂 不一定是这个工厂创建的实例,通过在id前面加上&符号

  • 相关阅读:
    Valid Anagram
    数据结构与算法2016-06-02
    数据结构与算法2016-06-03
    Delete Node in a Linked List
    Move Zeroes
    Javascript 常用的工具函数,更新中...
    有用的Javascript,长期更新...
    sql基本语法
    Javascript 有用的奇淫技巧
    关于 Vue 的一些问题(面试中面试官想听到的答案)
  • 原文地址:https://www.cnblogs.com/cnlj/p/3472713.html
Copyright © 2011-2022 走看看