public class InitBeanFactoryServlet extends HttpServlet {
public static final String INIT_FACTORY_NAME = "_my_bean_factory";
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
BeanFactory factory = null;
String configLocation = config.getInitParameter("configLocation");
if(configLocation == null){
factory = new PropertiesBeanFactory();
}else{
factory = new PropertiesBeanFactory(configLocation);
}
System.out.println("初始化BeanFactory......");
getServletContext().setAttribute(INIT_FACTORY_NAME, factory);
//初始化BeanUtils的转换器
ConvertUtils.register(new ChannelsSetConverter(), Set.class);
}
}
当重写init(ServletConfig)方法的时候,记得调用super.init(ServletConfig)
调用super.init(ServletConfig)的目的,主要是由于在父类(GenericServlet)中
有一个ServletConfig实例变量,super.init(ServletConfig)就是给这个实例变量复制。
这样,再后续的getServletContext()操作,才可以拿到ServletContext对象:
GenericServlet的部分源代码如下所示:
public abstract class GenericServlet
implements Servlet, ServletConfig, java.io.Serializable
{
private transient ServletConfig config;
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
public void init() throws ServletException {
}
public ServletConfig getServletConfig() {
return config;
}
public ServletContext getServletContext() {
return getServletConfig().getServletContext();
}