簡體   English   中英

自動接線,無需組件掃描或設置器/獲取器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM