2012-03-27 131 views
2

我想使用cglib作为spring的代理机制。问题是,我有一些bean的构造函数注入了它们的依赖关系,我无法改变它。 CGLIB似乎并不那么喜欢,并且不会让我实例化这个bean。有没有办法解决它? (例如,我可以禁用使用CGLIB一些豆子?或更好,但我可以有CGLIB代理的豆也?)CGLIB,弹簧和注入构造函数

的Tx提前

回答

7

一个简短的答案是,你不能代理豆类等。请参阅SPR-3150 jira问题。

+0

显然,我们可以期待在cglib 4.0 – 2013-12-27 15:33:36

+0

根据[评论由Juergen Hoeller在SPR-3150](https://jira.spring.io/browse/SPR-3150?focusedCommentId=96487&page=com .atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-96487),使用Spring 4.0,这不再是一个问题。 – 2014-03-17 14:29:16

1

由于尤金对他的简短回答可能是正确的,另一种方法是使用adapterdecorator模式,使用组合而不是继承。代理你的装饰器,让它拥有原始的bean作为依赖。

或者做明智的事情,切换到基于接口的代理。

+0

究竟如何?我应该为使用构造函数注入的每个类创建一个新的包装类? @Sean Patrick Floyd – Tomer 2013-08-15 14:32:55

+0

是的,基本上。或去基于接口的代理,这是少得多的痛苦 – 2013-08-15 15:26:13

+0

在我的这实际上也是一种痛苦也..我有一个服务是以特定的方式编写的(构造函数注入),我想使用代理的功能,而没有这样做我的代码发生了巨大的变化。我不能移动到基于接口的代理也..我试图创建自己的BeanPostProcessor,将用构造函数参数代理bean,但它有点复杂,我正在寻找一个更简单的解决方案..: - | @Sean Patrick Floyd – Tomer 2013-08-15 18:18:48