我看到this问题,我无法让Groovy在我的Spring MVC项目中工作。我应该在哪里保留它以及应该是什么样的完整路径?请原谅我的基本问题,但我必须开始在Spring MVC中使用Groovy。 Groovy在Spring 4.0 Snapshot中可用,根据官方网站,最终版本应该在12月份上线。但是现在,建议使用4.0版本吗? (它已经内置了对Groovy的支持)
参考代码:
<beans .........
...
...
<bean class="full.qualified.name.of.ProxyAwareAnnotationMethodHandlerAdapter" />
...
...
<lang:groovy script-source="classpath:com/example/mysample.groovy refresh-check-delay="1000" />
</beans>
java类如下:
//ProxyAwareAnnotationMethodHandlerAdapter.java
package name.assafberg.spring;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.aop.TargetSource;
import org.springframework.aop.framework.Advised;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
/**
* Add proxy awareness to <code>AnnotationMethodHandlerAdapter</code>.
*
* @author assaf
*/
public class ProxyAwareAnnotationMethodHandlerAdapter extends AnnotationMethodHandlerAdapter {
/**
* @param request
* @param response
* @param handler
* @return
* @throws Exception
* @see org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
*/
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
handler = unwrapHandler(handler);
return super.handle(request, response, handler);
}
/**
* @param handler
* @return
* @see org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#supports(java.lang.Object)
*/
@Override
public boolean supports(Object handler) {
handler = unwrapHandler(handler);
return super.supports(handler);
}
/**
* Attempt to unwrap the given handler in case it is an AOP proxy
*
* @param handler
* @return Object
*/
private Object unwrapHandler(Object handler) {
if (handler instanceof Advised) {
try {
TargetSource targetSource = ((Advised) handler).getTargetSource();
return targetSource.getTarget();
} catch (Exception x) {
throw new RuntimeException(x);
}
} else {
return handler;
}
}
}
修改
无需处理上述文件。我唯一能够处理Groovy的版本。从命令行确保,该版本的Groovy与类路径添加的版本相同。它奏效了。几乎不需要任何配置。刚创建一个.groovy类而不是Java(感谢+ kunal启发。)
@Controller
class TestController {
@Autowired
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
String People() {
return "people"
}
}
答案 0 :(得分:4)
当我想出一种创建Groovy控制器的方法时,我问question。
Groovy控制器在一个真正的应用程序中为我提供了出色的工作,现在已经生产了一年多。为了帮助人们在Spring MVC项目中看到groovy的价值,我已经分叉了Heroku的示例java应用程序并在groovy中重写了控制器。请在这里查看项目:
https://github.com/kdabir/groovy-springmvc-sample
此外,您还可以查看历史记录,了解在现有Java项目中如何引入groovy。虽然从那以后我没有接触过这个项目,但它应该让你对如何开始有一个合理的想法。
编辑:
为了澄清一下,您只需将.java
文件转换为.groovy
,它就可以正常工作(只要它是有效的groovy语法)。
答案 1 :(得分:1)
直接使用groovy编写spring-mvc
控制器会在重新加载groovy时引起一些cglib
错误。
因此,您可以尝试使用jdk
代理控制器接口(与Spring注释一起单独使用)的此解决方案,例如@RequestMapping
@RestController
@ResponseBody
。
此jdk
代理可以链接常规对象以执行。
您可以创建弹簧扫描以扫描代理接口
您可以从micro-mvc lib中看到示例。
https://github.com/jeffreyning/micro-mvc https://github.com/jeffreyning/nh-micro
扫描显示在GroovyScanner
中
代理显示在InjectGroovyProxy