2015-04-12 57 views
0

是否有可能@Autowired自動裝配Autowired,沒有成分掃描或setter /吸氣

@Repository("categoryDao") 
public class SomeDaoImpl implements SomeDao { 
    @Autowired 
    private SessionFactory sessionFactory; 
    ... 
} 

不使用的setter /吸氣*組件掃描

我有一個配置

<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

您可以使用構造函數注入代替,所以像

@Repository("categoryDao") 
public class SomeDaoImpl implements SomeDao { 

    private SessionFactory sessionFactory; 

    @Autowired 
    public SomeDaoImpl(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
    } 
    ... 
} 

有關於不同類型的注射商量好了,有很多可用的refernce鏈接here

更新後評論

現在你已經解釋了,你不應該在測試的時候改變你的代碼。在你的情況,你應該使用一個測試特定的XML上下文,但降低了包被掃描到剛夠

也是一個方便的結構是,你的測試方面的xml裏面,可以redifine一些先實例化,並使用context:exclude-filter注入豆屬性,有用的嘲笑,一個例子片段

<!--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> 
+0

我的情況是我的生產'applicationContext'正在使用組件掃描。我想要做的是測試'DAO'我的代碼沒有任何setter或getter,甚至是一個參數化構造函數。我想在每個測試中加載一個較輕的配置文件。有另一種方法嗎? – user2785929

+0

好的,我已經編輯了答案,因爲在這方面我的答案沒有實際價值。正如在編輯中所說的那樣,您可以簡單地使用applicationContext.xml的一個副本,去除所有您測試時不需要的東西。掃描不應該是你的直接問題,如果你只是需要掃描的範圍 –

+0

只有一個問題,我接受之前。我的用於測試的applicationContext位於'test source folder'裏面我想用一個真正的'DAO'如何映射這個包? – user2785929