tomcat下动态编译java类

北落师门_Orz 2015-10-16 01:49:44
问题是这样,我的java类是动态生成,生成后再编译它,然后用反射来得到他的实例然后再执行,那么这个动态java类有引用到我写的别的类,在junit测试环境中是编译成功,也执行成功了,但是在tomcat跑起来后,在编译那一关不通过,原因就是我引入了自己写的类,我已经把java类放在tomcat/webapp/project/web-inf/classes目录下编译出来的文件还是无法import 我自己写的类,请问如何解决
...全文
194 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
北落师门_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()
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-10-16 01:49
社区公告
暂无公告