8

我有一个可以延伸的春豆HibernateDaoSupport。我希望这个 bean 注入到我的控制器中,但我不希望它实现任何接口。我只想从我的其余代码中引用具体类(也许不使用 AopProxy?)有没有人有办法做到这一点?

<bean id="mySampleService" class="com.sample.MySampleService">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

@Autowired
private MySampleService mySampleService;

... getters and setters ....

我知道使用接口是个好主意,这就是 IoC 的全部意义,但请不要建议我使用接口。

4

3 回答 3

12

如果要代理的类(在您的情况下通过事务代理)实现任何接口(在您的情况下InitializingBean由实现HibernateDaoSupport),则 Spring 默认使用基于 JDK 动态代理的代理策略。

因此,它创建了一个 type 的代理InitializingBean,很明显,它不能注入到 type 的字段中MySampleService

如果您不想使用接口,您可以通过声明<tx:annotation-driven>with来覆盖事务方面使用的策略proxy-target-class = "true"

也可以看看:

于 2012-07-17T18:41:22.593 回答
0

检查以下内容。确保您的类路径中有 CGLIB。

http://static.springsource.org/spring/docs/3.0.0.M3/spring-framework-reference/html/ch08s06.html

于 2012-07-17T18:37:02.957 回答
0

您可以将包括 xml 中的映射控制器在内的所有内容编写为 bean,然后您不需要编写接口。否则,使用注释时,您需要构建接口来代理它们。

于 2012-07-17T23:48:16.370 回答