Ⅶ.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的共同點 html

  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獲取對象在容器裏面的名稱

相關文章
相關標籤/搜索