[英]Autowired without component scan or setter/getter
是否可以@Autowired
一個字段
@Repository( "categoryDao" )
public class SomeDaoImpl implements SomeDao {
@Autowired
private SessionFactory sessionFactory;
...
}
不使用setter / getter或* component scan ?
我有一個配置
<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>
您可以改用構造函數注入,所以類似
@Repository( "categoryDao" )
public class SomeDaoImpl implements SomeDao {
private SessionFactory sessionFactory;
@Autowired
public SomeDaoImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
...
}
關於不同類型的注入有一個很好的討論, 這里有很多參考鏈接
評論后更新
既然您已經解釋了,就不應該根據測試來更改代碼。 在您的情況下,您應該使用特定於測試的XML上下文,但是將要掃描的包減少到恰到好處
另外一個方便的構造是,在測試上下文xml中,您可以通過首先實例化並使用context:exclude-filter
屬性(對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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.