在Grails中如何使用Class.forName?

在Grails中如何使用Class.forName?

<!-- Place this tag in your head or just before your close body tag -->
我是在grails的filters里调用的Class.forName("xxx")

一直报java.lang.ClassNotFoundException,换了好几个类来试,有domain有service,全都不行,路径绝对没错,从类的包名直接拷下来再加上了类名,也注意了大小写,还特别去WEB-INF/classes里确认过是有.class文件,之后又重启,clean,但是,一执行到这个方法依然报java.lang.ClassNotFoundException

还有什么可能出问题的地方呢?应该不可能不能用的啊,或者groovy有没有别的替代方法可以实现同样目的?通过类名调用类

问题的根源出在ClassLoader上面,建议补充一下这方面的知识,看完之后你就明白是什么原因了。

在Grails中需要使用当前Thread的ClassLoader,否则,就会出现你上面的问题。这里有个简单的例子:

1Class c= Class.forName(className, true, Thread.currentThread().contextClassLoader)

除了上面的方法,你也可以用GrailsApplication接口中的getClassForName方法。如:

1grailsApplication.getClassForName(params.className)

上面的代码可以在任何能够注入grailsApplication的地方使用,要是没法注入,还可以用下面的代码:

1ApplicationHolder.application.getClassForName(className) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值