2015-12-22 121 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

至于哪种选择更好 - 这是一个问题的品味和要求。两者都是有效的。当注入的对象很明显时,我经常使用它,因为它不那么冗长。另一方面,这意味着更少的控制,读者需要做一些猜测,如果他/她想知道到底注入了什么。