📄 springcontainer.java.svn-base
字号:
package com.easyjf.container.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.ConfigurableWebApplicationContext;
import com.easyjf.container.Container;
import com.easyjf.container.InnerContainer;
/**
* Spring and EasyJWeb Integeration Container .
* <p>
* <b>Some Questions :</b>
*
* 1.Why there is a parent bean in {@link InnerContainer} ?
*
* 2.Should this {@link InnerContainer} be used in representation layer ?
*
* 3.Dose Method <code>getBean(Class type)</code> have any value ?
*
* <p>
* <b>Usage :</b>
*
* <code>
* <bean name="SpringIntegerationContainer" class="com.easyjf.container.impl.SpringIntegerationContainer" scope="singleton">
* <property name="beanDescriptions">
* <list>
* <value>classpath:conf/beans-service.xml</value>
* <value>classpath:conf/beans-dao.xml</value>
* </list>
* </property>
* </bean>
* </code>
* @author ecsoftcn@hotmail.com,大峡
*
*/
public class SpringContainer implements InnerContainer {
private Container parent;
private BeanFactory factory;
private boolean haveStart;
private String configLocation;
private static final Logger logger = Logger
.getLogger(SpringContainer.class);
public void setConfigLocation(String configLocation) {
this.configLocation = configLocation;
}
public Container getParent() {
return parent;
}
public void setParent(Container parent) {
this.parent = parent;
}
public void setFactory(BeanFactory factory) {
this.factory = factory;
}
public BeanFactory getFactory() {
return factory;
}
public boolean containsBean(String name) {
return factory.containsBean(name);
}
public Object getBean(String name) {
Object bean = null;
try {
bean = factory.getBean(name);
} catch (Exception e) {
}
return bean;
}
public Object getBean(Class type) {
if (factory instanceof ListableBeanFactory) {
ListableBeanFactory context = (ListableBeanFactory) factory;
Map beans = context.getBeansOfType(type);
if (beans != null && beans.size() > 0)
return beans.values().iterator().next();
}
return null;
}
public Collection getBeansName() {
if (factory instanceof ApplicationContext) {
ApplicationContext context = (ApplicationContext) factory;
return Arrays.asList(context.getBeanDefinitionNames());
}
return null;
}
public void init() {
logger.info("开始Spring容器初始化...");
if (factory == null){
if(this.configLocation!=null&&!"".equals(this.configLocation)){
this.factory= new ClassPathXmlApplicationContext(this.configLocation.split(";"));
}else{
this.factory=new ClassPathXmlApplicationContext("classpath: applicationContext.xml");
}
}
if (factory instanceof AbstractApplicationContext) {
AbstractApplicationContext context = (AbstractApplicationContext) factory;
if (factory instanceof ConfigurableWebApplicationContext) {
// 这里的代码不直观
ConfigurableWebApplicationContext webContext = (ConfigurableWebApplicationContext) factory;
if (parent != null && parent instanceof WebContextContainer) {
webContext.setServletContext(((WebContextContainer) parent)
.getServletContext());
}
if (!haveStart) {
context.refresh();
haveStart = true;
}
}
if(parent!=null && parent instanceof WebContextContainer)
{
this.registerWebContext(((WebContextContainer) parent).getServletContext());
}
}
logger.info("Spring容器初始化完成!");
}
public List getBeans(Class type) {
List ret=null;
if (factory instanceof ListableBeanFactory) {
ListableBeanFactory context = (ListableBeanFactory) factory;
Map beans = context.getBeansOfType(type);
if (beans != null && beans.size() > 0)
ret=new ArrayList(beans.values());
}
return ret;
}
public BeanFactory getBeanFactory()
{
return factory;
}
/**
* 在servlet上下文中注册Spring WebApplicationContext
* @param servletContext
*/
public void registerWebContext(ServletContext servletContext)
{
servletContext.setAttribute("org.springframework.web.context.WebApplicationContext.ROOT",this.getFactory());
}
/*
* @see com.easyjf.container.InnerContainer#getContainerInfo()
*/
public String getContainerInfo() {
return "Spring";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -