我有一个扩展HibernateDaoSupport
的spring bean。我希望将这个bean注入到我的控制器中,但我不希望它实现任何接口。我只是想从我的其余代码中引用具体类(或许不使用AopProxy?)有没有人有办法做到这一点?
<bean id="mySampleService" class="com.sample.MySampleService">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
@Autowired
private MySampleService mySampleService;
... getters and setters ....
我知道使用界面是一个好主意,这是IoC的重点,但请不要建议我使用界面。
答案 0 :(得分:10)
如果要代理的类(在您的情况下通过事务代理)实现任何接口(在您的情况下由InitializingBean
实现的HibernateDaoSupport
),则Spring默认使用基于JDK动态代理的代理策略。
因此,它创建了InitializingBean
类型的代理,显然不能将其注入MySampleService
类型的字段中。
如果您不想使用界面,可以通过<tx:annotation-driven>
声明proxy-target-class = "true"
来覆盖事务方面使用的策略。
另见:
答案 1 :(得分:0)
检查以下内容。确保您的类路径上有CGLIB。
http://static.springsource.org/spring/docs/3.0.0.M3/spring-framework-reference/html/ch08s06.html
答案 2 :(得分:0)
你可以把包括xml中映射的控制器在内的所有内容写成bean,然后你就不需要编写接口了。 否则,使用注释需要构建接口来代理它们。