📄 defaultcontainer.java
字号:
package com.easyjf.container.impl;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.easyjf.beans.BeanWrapper;
import com.easyjf.beans.MutablePropertyValues;
import com.easyjf.beans.PropertyValue;
import com.easyjf.container.BeanDefinition;
import com.easyjf.container.Container;
import com.easyjf.container.Scope;
public class DefaultContainer extends SingletonBeanContainer implements
Container {
private static final Logger logger =Logger.getLogger(DefaultContainer.class);
private final Map beanDefinitions=new HashMap();
private final Map scopes=new HashMap();
public DefaultContainer()
{
}
public boolean containsBean(String name) {
boolean ret=beanDefinitions.containsKey(name);
return ret;
}
public Object getBean(String name) {
Object bean=super.getSingletionBean(name);
if(bean==null)
{
BeanDefinition definition=(BeanDefinition)beanDefinitions.get(name);
if(definition!=null)bean=this.create(definition);
}
return bean;
}
public Object getBean(Class type) {
Object bean=super.getSingletionBean(type);
if(bean==null)
{
BeanDefinition definition=getBeanDefinition(type);
if(definition!=null)
{
bean=this.create(definition);
}
}
return bean;
}
public Collection getBeansName() {
return java.util.Collections.unmodifiableCollection(beanDefinitions.keySet());
}
public Object create(BeanDefinition beanDefinition)
{
Object bean=null;
if("singleton".equalsIgnoreCase(beanDefinition.getScope()))
{
bean=BeanCreatorUtil.initBean(beanDefinition);
if(bean!=null)super.register(beanDefinition.getBeanName(), bean);
}
else if("prototype".equalsIgnoreCase(beanDefinition.getScope()))
{
bean=BeanCreatorUtil.initBean(beanDefinition);
}
else
{
Scope scope=(Scope)scopes.get(beanDefinition.getScope());
if(scope!=null)
{
bean=scope.getBean(beanDefinition.getBeanName(),beanDefinition);
}
}
//设值方法注入
if(bean!=null)
{
BeanWrapper wrapper=new BeanWrapper(bean);
MutablePropertyValues pvs=new MutablePropertyValues();
for(int i=0;i<beanDefinition.getPropertyValues().getPropertyValues().length;i++)
{
PropertyValue pv=beanDefinition.getPropertyValues().getPropertyValues()[i];
if(pv.getValue() instanceof BeanDefinition)
{
String beanName=((BeanDefinition)pv.getValue()).getBeanName();
Object refBean=getBean(beanName);
if(refBean==null)throw new com.easyjf.beans.exception.BeansException("无法加载属性指定名称的Bean:"+beanName);
pvs.addPropertyValue(new PropertyValue(pv.getName(),refBean));
}
else pvs.addPropertyValue(pv);
}
wrapper.setPropertyValues(pvs);
}
//自动按属名称注入
//自动按属性类型注入
return bean;
}
private BeanDefinition getBeanDefinition(Class type)
{
BeanDefinition ret=null;
Iterator it=beanDefinitions.values().iterator();
while(it.hasNext())
{
BeanDefinition definition=(BeanDefinition)it.next();
if(type.isAssignableFrom(definition.getBeanClass()))
{
ret=definition;
break;
}
}
return ret;
}
public void registerBeanDefinition(String name,BeanDefinition definition)
{
beanDefinitions.put(name,definition);
}
public void registerScope(String name,Scope scope)
{
scopes.put(name, scope);
}
public void registerBeanDefinitions(List definitions)
{
for(int i=0;i<definitions.size();i++)
{
BeanDefinition definition=(BeanDefinition)definitions.get(i);
//System.out.println(definition);
registerBeanDefinition(definition.getBeanName(),definition);
}
}
//初始化并装截容器
public void refresh()
{
super.removeAll();
java.util.Iterator it=beanDefinitions.entrySet().iterator();
while(it.hasNext())
{
Map.Entry en=(Map.Entry)it.next();
BeanDefinition definition=(BeanDefinition)en.getValue();
if(BeanCreatorUtil.isCreateOnStart(definition))create(definition);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -