是否可以@Autowired
字段
@Repository( "categoryDao" )
public class SomeDaoImpl implements SomeDao {
@Autowired
private SessionFactory sessionFactory;
...
}
不使用 setter / getter 或 *组件扫描?
我有一个配置
<bean id="categoryDao" class="com.example.dao.SomeDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
...
</bean>
答案 0 :(得分:0)
您可以使用构造函数注入,例如
@Repository( "categoryDao" )
public class SomeDaoImpl implements SomeDao {
private SessionFactory sessionFactory;
@Autowired
public SomeDaoImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
...
}
关于不同类型的注射有很好的讨论,有很多参考链接可用here
评论后更新
现在您已经解释过了,您不应该在测试时更改代码。在您的情况下,您应该使用特定于测试的XML上下文,但将正在扫描的软件包减少到足够的
另一个方便的构造是在你的测试上下文xml中,你可以通过首先实例化它并使用context:exclude-filter
属性重新定义一些注入的bean,对于模拟很有用,一个示例代码片段
<!--Mock object -->
<bean id="beanDAO" name="beanDAO" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="your.package.BeanDAO"/>
</bean>
<context:component-scan base-package="your.package">
<context:exclude-filter type="regex" expression="your\.package\.Bean*"/>
</context:component-scan>