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

📄 guicecontainer.java.svn-base

📁 EasyJWeb是基于java技术
💻 SVN-BASE
字号:
package com.easyjf.container.impl;


import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import com.easyjf.container.BeanDefinition;
import com.easyjf.container.Container;
import com.easyjf.container.InnerContainer;
import com.easyjf.util.ClassUtils;
import com.easyjf.web.exception.FrameworkException;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;

/**
 * 
 * @author ecsoftcn@hotmail.com
 * 
 * @version $Id: GuiceContainer.java, 2007-4-23 上午12:30:47 Tony Exp $
 */
public class GuiceContainer implements InnerContainer {

	private static final Logger	logger		= Logger.getLogger(GuiceContainer.class);

	private String[]			modules		= new String[] {};

	private String				stage		= Stage.PRODUCTION.name();

	private Injector			injector;

	private Container			parent;

	private static boolean		initialized	= false;

	private Map<String, Class>	beanNames	= new HashMap<String, Class>();
	 
	public String getContainerInfo() {

		return "Guice Framework";
	}
	 
	public Container getParent() {

		return parent;
	}
	 
	public void init() {

		logger.info("GuiceContainer is setup!");

	}
	 
	public void setParent(Container container) {

		this.parent = container;
	}
	 
	public boolean containsBean(String name) {

		return beanNames.containsKey(name);
	}

		 
	public Object getBean(String name) {

		return getBean(beanNames.get(name));
	}

		 
	@SuppressWarnings("unchecked")
	public Object getBean(Class type) {

		Object instance = null;

		try {
			instance = injector.getInstance(type);
		} catch (Throwable e) {
			logger.error("Error occured while retrive bean from GuiceContainer!", e);
		}

		return instance;
	}

		 
	public List getBeans(Class type) {
		throw new FrameworkException("未实现的功能!");		
	}

	public Collection getBeansName() {

		return beanNames.keySet();
	}

	/**
	 * setup Guice container.
	 * 
	 * @param beanDefinitions
	 */
	@SuppressWarnings("unchecked")
	void inject(final Map beanDefinitions) {

		if (!initialized) {

			injector = Guice.createInjector(Stage.valueOf(stage), new AbstractModule() {

				@Override
				protected void configure() {

					for (String module : modules) {
						try {
							Object instance = ClassUtils.forName(module).newInstance();
							if(instance instanceof AbstractModule){
								install((AbstractModule)instance);
							}
						} catch (Throwable e) {
							throw new FrameworkException("Error occured while install [" + module + "] module:", e);
						}
					}

					java.util.Iterator it = beanDefinitions.keySet().iterator();
					while (it.hasNext()) {
						String key = (String) it.next();
						BeanDefinition definition = (BeanDefinition) beanDefinitions.get(key);
						beanNames.put(key, definition.getBeanClass());
						bind(definition.getBeanClass());
					}
				}

			});
			initialized = true;
		}
	}

	// ------- Container Managered ------------------

	/**
	 * @param modules the modules to set
	 */
	public void setModules(String[] modules) {

		this.modules = modules;
	}

	/**
	 * @param stage the stage to set
	 */
	public void setStage(String stage) {

		this.stage = stage;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -