/*
* 2013-8-13 STORY #6535 [研发中心/内部需求][jresplus/mvc]validation扩展bean增加validationMessageSource的beanname注入支持
*/
package com.hundsun.jresplus.beans;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.OrderComparator;
/**
*
* @author LeoHu copy sagahl
*
*/
public class ObjectFactoryImpl implements ObjectFactory,
ApplicationContextAware {
private AutowireCapableBeanFactory autowireCapableBeanFactory;
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
this.autowireCapableBeanFactory = applicationContext
.getAutowireCapableBeanFactory();
}
@SuppressWarnings("unchecked")
public <T> T createBean(Class<T> beanClass, boolean dependencyCheck) {
return (T) autowireCapableBeanFactory.createBean(beanClass,
AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, dependencyCheck);
}
public void autowireBeanProperties(Object existingBean) {
autowireCapableBeanFactory.autowireBeanProperties(existingBean,
AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
}
public <T> Map<String, T> getBeansOfType4Map(Class<T> beanClass) {
return applicationContext.getBeansOfType(beanClass);
}
public <T> List<T> getBeansOfType4List(Class<T> beanClass) {
Map<String, T> map = getBeansOfType4Map(beanClass);
if (map != null && map.size() > 0) {
List<T> list = new ArrayList<T>(map.values());
OrderComparator.sort(list);
return list;
}
return null;
}
public Object getBean(String name) {
try {
return applicationContext.getBean(name);
} catch (NoSuchBeanDefinitionException e) {
return null;
}
}
public <T> T getBean(Class<T> beanClass) {
try {
return applicationContext.getBean(beanClass);
} catch (NoSuchBeanDefinitionException e) {
return null;
}
}
public <T> T[] getBeansOfType4Array(Class<T> beanClass) {
Map<String, T> map = getBeansOfType4Map(beanClass);
if (map != null && map.size() > 0) {
@SuppressWarnings("unchecked")
T[] result = (T[]) Array.newInstance(beanClass, map.size());
int n = 0;
for (Entry<String, T> entry : map.entrySet()) {
result[n] = entry.getValue();
n++;
}
OrderComparator.sort(result);
return result;
}
return null;
}
}