今天在看了天涯中classLoader的一篇文章后,自己实际应用了一下URLClassLoader,发现项目中如果想实现一些Application级的信息同步,这个类将是一切的基础。就将自己试用的代码保存下来。
现在是假想在BOC项目中有个InitServlet,如果要自己动态加载这个Servlet就需要在初始化的时候创建一个自己的ClassLoader,下面是创建这个ClassLoader的方法。
public void createClassLoader()
{
try
{
String path="file:/"+servletContext.getRealPath("/")+"WEB-INF/classes/";
URLClassLoader uc=new URLClassLoader(new URL[]{new URL(path)},InitServlet.class.getClassLoader());
HttpServlet s=(HttpServlet)uc.loadClass("com.finet.bochk.common.InitServlet").newInstance();
// s.init();
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在获取这个ClassLoader后,就可以自己动态控制容器内的InitServlet的加载,不在依赖于容器管理。这个就是所谓的BMB吧。
现在是假想在BOC项目中有个InitServlet,如果要自己动态加载这个Servlet就需要在初始化的时候创建一个自己的ClassLoader,下面是创建这个ClassLoader的方法。
public void createClassLoader()
{
try
{
String path="file:/"+servletContext.getRealPath("/")+"WEB-INF/classes/";
URLClassLoader uc=new URLClassLoader(new URL[]{new URL(path)},InitServlet.class.getClassLoader());
HttpServlet s=(HttpServlet)uc.loadClass("com.finet.bochk.common.InitServlet").newInstance();
// s.init();
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在获取这个ClassLoader后,就可以自己动态控制容器内的InitServlet的加载,不在依赖于容器管理。这个就是所谓的BMB吧。