📄 guicecontainer.java
字号:
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 + -