zoukankan      html  css  js  c++  java
  • Ⅶ.spring的点点滴滴--自定义对象行为

    承接上文

    自定义对象行为


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

      public class lifeCycle :
            Spring.Objects.Factory.IInitializingObject, 
            System.IDisposable,
            Spring.Objects.Factory.IObjectFactoryAware,
            Spring.Objects.Factory.IObjectNameAware
        {
            public Spring.Objects.Factory.IObjectFactory OFactory { get; set; }
            public String Name { get; set; }
            public void initMethod(){}
            public void destroyMethod() {}
            public void AfterPropertiesSet(){
                initMethod();
            }
            public void Dispose(){
                destroyMethod();
            }
            public Spring.Objects.Factory.IObjectFactory ObjectFactory{
                set { OFactory = value; }
            }
            public string ObjectName{
                set { Name = value; }
            }
        }
        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="lifeCycle" 
        type="SpringBase.lifeCycle, SpringBase" 
        init-method="initMethod" 
        destroy-method="destroyMethod" />
    <object id="customFac" type="SpringBase.CustomFactory, SpringBase"/>

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

    package springdemo;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.*;
    public class LifeCycle implements
            InitializingBean,
            DisposableBean,
            BeanFactoryAware, BeanNameAware {
        private BeanFactory oFactory;
        private String name;
        public void initMethod(){}
        public void destroyMethod() {}
        @Override
        public void afterPropertiesSet() throws Exception {
            initMethod();
        }
        @Override
        public void destroy() throws Exception {
            destroyMethod();
        }
        @Override
        public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
            oFactory=beanFactory;
        }
        @Override
        public void setBeanName(String name) {
            this.name=name;
        }
        public String getName() {
            return name;
        }
        public BeanFactory getoFactory() {
            return oFactory;
        }
    }
    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="lifeCycle" class="springdemo.LifeCycle"
              init-method="initMethod"
              destroy-method="destroyMethod" />
        <bean id="customFac" class="springdemo.CustomFactory" />

    javaCsharp的共同点

    1. IObjectFactoryAware|BeanFactoryAware以及IObjectNameAware|BeanNameAware 实现的接口的属性或者方法会在容器初始化完成后spring自动调用赋值,只要更改方法体即可
    2. IInitializingObject|InitializingBean接口的AfterPropertiesSet方法 在属性赋值完成后调用,也可以用init-method节点来和spring框架解耦
    3. IDisposable|DisposableBean接口的destroy方法在对象释放的时候调用, 也可以用destroy-method节点来和spring框架解耦
    4. IFactoryObject|FactoryBean为创建一个工厂类, 通过id调用Ioc容器的时候返回的是getObject方法的返回值不是工厂类, 前一章节的获取对象的属性就是继承了这个接口,isSingleton返回这个对象是不是单例, ObjectType|getObjectType返回对象类型
    5. IObjectFactoryAware|BeanFactoryAware获取当前Ioc的容器
    6. IObjectNameAware|BeanNameAware获取对象在容器里面的名称

  • 相关阅读:
    【OI新闻】2016.10.06
    旧博客欢迎莅临
    【NYOJ42】一笔画问题
    LCIS最长公共上升子序列
    LIS最长上升子序列
    LCS最长公共子序列
    T2848 列车调度(二分或dp)
    二分图的最大匹配、完美匹配和匈牙利算法
    高精大水题
    最大0,1子矩阵
  • 原文地址:https://www.cnblogs.com/cnlj/p/3469672.html
Copyright © 2011-2022 走看看