DomainObjectFactory.java

package com.tradecloud.domain.infrastructure.persistence;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;

public class DomainObjectFactory implements BeanFactoryAware {

    private AutowireCapableBeanFactory factory;

    public void setBeanFactory(BeanFactory factory) throws BeansException {

        if (!(factory instanceof AutowireCapableBeanFactory)) {
            throw new IllegalArgumentException("BeanFactory must be AutowireCapableBeanFactory");
        }

        this.factory = (AutowireCapableBeanFactory) factory;

    }

    public Object newDomainObject(Class clazz) {
        return factory.autowire(clazz, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
    }

    public boolean injectDependencies(Object object) {

        factory.autowireBeanProperties(object, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
        return true;
    }
}