tomcat下动态编译java类

北落师门_Orz 2015-10-16 01:49:44
问题是这样,我的java类是动态生成,生成后再编译它,然后用反射来得到他的实例然后再执行,那么这个动态java类有引用到我写的别的类,在junit测试环境中是编译成功,也执行成功了,但是在tomcat跑起来后,在编译那一关不通过,原因就是我引入了自己写的类,我已经把java类放在tomcat/webapp/project/web-inf/classes目录下编译出来的文件还是无法import 我自己写的类,请问如何解决
...全文
266 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
北落师门_Orz 2015-10-16
  • 打赏
  • 举报
回复
引用 4 楼 ctl71801 的回复:
	public static void registerHandler(Class<? extends IHandler> handlerClass) throws AlreadyRegisteredException{
		IHandler handler = handlerClass.newInstance();

		synchronized(HandlerManager.class)
		{
			IHandler old = handlerMap.get(handler.getClassName());
			if(old != null)
			{
				log.error("handler.getClassName() is register");
				throw new AlreadyRegisteredException(s);
			}
			else
			{
				handlerMap.put(handler.getClassName(), handler);
			}
		}
	}
贴个代码,这个是单例的情况,非单例的情况也差不多 可以改成工厂模式生成对象
可能你这种方式不行啊 因为我是用spring管理的,要访问数据库的,而且他一直是报包找不到 应该是tomcat的类加载器没有加载那个生成的java类,而是jdk的类加载器加载了
ctl71801 2015-10-16
  • 打赏
  • 举报
回复
	public static void registerHandler(Class<? extends IHandler> handlerClass) throws AlreadyRegisteredException{
		IHandler handler = handlerClass.newInstance();

		synchronized(HandlerManager.class)
		{
			IHandler old = handlerMap.get(handler.getClassName());
			if(old != null)
			{
				log.error("handler.getClassName() is register");
				throw new AlreadyRegisteredException(s);
			}
			else
			{
				handlerMap.put(handler.getClassName(), handler);
			}
		}
	}
贴个代码,这个是单例的情况,非单例的情况也差不多 可以改成工厂模式生成对象
北落师门_Orz 2015-10-16
  • 打赏
  • 举报
回复
引用 1 楼 ctl71801 的回复:
不能import编译的类 可以import 接口,然后 把编译好的class放入 Map<String,Class> ,需要使用的时候通过类名获取对应的实现类后newInstance()
意思是要在动态生成的java类里先做好反射得到我想要的那个class文件然后实例化他吗, 可是我在测试中已经是通过的,不应该是编译的问题吗
北落师门_Orz 2015-10-16
  • 打赏
  • 举报
回复
意思是要在动态生成的java类里先做好反射得到我想要的那个class文件然后实例化他吗
ctl71801 2015-10-16
  • 打赏
  • 举报
回复
不能import编译的类 可以import 接口,然后 把编译好的class放入 Map<String,Class> ,需要使用的时候通过类名获取对应的实现类后newInstance()

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧