标签归档:rose

[原] 给paoding-rose添加动态编译实现ParamResolver的功能

通过javassist,添加了动态编译解析参数类的功能。记录一下主要目的和原理:
目的:动态解析传入参数组合成类。
最后达到的效果:

主要是为了能自动获取DataTables传入的参数:

过程:最初修改自wanghaomiao的blog(以下2-6条)。原文是用java的反射机制,我加入了7-9条,实现了动态编译解析器类。

原理:rose的ParamResolver接口提供了supports和resolve方法,在supports判断某个类是否支持解析,resolve里实现解析。我引入了一个WebBean注解,通过是否加注了WebBean来判断。如果加注了,就用ResolverHelper来实现动态编译。

动态编译核心代码:

附动态生成的解析类主要方法(支持嵌套、支持List、暂支持int long boolean)

[原] paoding-rose获取spring的ApplicationContext

刚开始用rose,因为有些服务是在线程里的,需要getBean。
试了好几个办法,都没法得到spring的ApplicationContext,
比如实现 ApplicationContextAware 结果没Aware。
有一个解决办法是所有线程里用到的依赖都在new的时候传递进去(也是rose作者推荐的方案),不过有时候比较麻烦,比如依赖很多很多,参数一大串;或者临时测一下,又要写一堆@Autowired
另外wangqiaowqo(rose作者之一)在blog里写了通过 new RoseAppContext(); 的方法,实际使用发现这种方式相当于把spring又重启了一遍,所有服务都会重新init,有可能导致严重问题。
有没有办法实现类似一个App.getBean()这种方法呢。
我试了一下,是可以得到最初spring启动环境的那个ApplicationContext的,方法如下(有点绕哦,因为@Autowired不能注解static成员,就把app本身从ApplicationContext中getBean):

其实核心是