2015-12-22 46 views
0

我有一個使用Autowire的程序。這是java中的Spring Autowire用法

public class MyBean 
{ 
    private DemoBean db; 
    public void setDb(DemoBean db) 
    { 
     this.db=db; 
    } 
} 

在XML文件中

<beans> 
    <bean id="id1" class="MyBean" autowire="byName" /> 
    <bean id="db" class="DemoBean" /> 
</beans> 

號,而不是使用自動裝配,我只是做

import SpringProgram.DemoBean; 
public class MyBean 
{ 
    private DemoBean db; 
    public void setDb(DemoBean db) 
    { 
     this.db=db; 
    } 
} 

甚至有可能嗎?

<beans> 

    <bean id="id1"> 
    <property name="sb" class="MyBean"> 
     <ref local="id2" /> 
    </property> 
    </bean> 

    <bean id="id2" class="DemoBean"> 

</beans> 

這可能嗎? 什麼不同的autowire做什麼?它只是將一個類的函數&插入到另一個類中嗎?

+0

http://stackoverflow.com/questions/19414734/understanding-spring-autowired-usage –

回答

1

請參閱此線程here

的@Autowired註解讓你的東西注入其他地方跳過配置,只是它給你的。假設你的包是com.mycompany.movi​​es你必須把這個標籤在你的XML(應用程序上下文文件):

<context:component-scan base-package="com.mycompany.movies" /> 

這個標籤會做自動掃描。假設每個必須成爲bean的類都使用@Component(對於簡單bean)或@Controller(對於servlet控件)或@Repository(對於DAO類)的正確註釋進行註釋,並且這些類位於com包下的某個位置。 mycompany.movi​​es,Spring會找到所有這些併爲每個bean創建一個bean。這是在2個類的掃描中完成的 - 它第一次只搜索需要成爲bean的類並映射它需要做的注入,而在第二次掃描時它注入了bean。當然,您可以在更傳統的XML文件或@Configuration類(或三者的任意組合)中定義bean。

1

它不會改變的類,它只是設法直接訪問私有字段(這是一個Java反射功能「setAccessible」,例如參見How does Spring @Autowired work

至於哪種選擇更好 - 這是一個問題的品味和要求。兩者都是有效的。當注入的對象很明顯時,我經常使用它,因爲它不那麼冗長。另一方面,這意味着更少的控制,讀者需要做一些猜測,如果他/她想知道到底注入了什麼。