⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultcontainer.java

📁 一个简单的java邮件系统源码
💻 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 + -