2017-02-16 52 views
1

时,我有一个XML Bean文件弹簧自动装配使用配置类

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
    <context:annotation-config/> 
    <bean id="helloWorld" class="com.a.b.HelloWorld"> 
     <property name="attr1" value="Attr1 from XML"></property> 
    </bean> 
    <bean id="helloWorld2" class="com.a.b.HelloWorld2"> 
     <property name="attr2" value="Attr2 from XML"></property> 
    </bean> 
</beans> 

而且我有使用自动装配构造这样

public class HelloWorld2{ 
     private String attr2; 
     public void setAttr2(String message){ 
      this.attr2 = message; 
     } 

     public void getAttr2(){ 
      System.out.println("getAttr2 == " + attr2); 
     } 


    } 

public class HelloWorld{ 
     private String attr1; 
     private HelloWorld2 helloWorld2;  
     public HelloWorld(){ 

     } 
     @Autowired 
     public HelloWorld(HelloWorld2 helloWorld2){ 
      System.out.println("hhh"); 
      this.helloWorld2 = helloWorld2; 
     } 


    public void setAttr1(String message){ 
      this.attr1 = message; 
     } 

     public void getAttr1(){ 
      System.out.println("getAttr1 == " + attr1); 
     } 
     public void getH(){ 
      helloWorld2.getAttr2(); 
     } 
    } 

而且自动连接工作正常。

现在我想将我的豆移动到配置类。 但随后如何移动代码,使自动装配工程?

我已经试过这样的,但它不工作

@Configuration 
public class Config { 
    @Bean 
    public HelloWorld helloWorld(){ 
     HelloWorld a = new HelloWorld(); 
     a.setAttr1("Demo Attr1"); 
     return a; 

    } 

    @Bean 
    public HelloWorld2 helloWorld2(){ 
     HelloWorld2 a = new HelloWorld2(); 
     a.setAttr2("Demo Attr2"); 
     return a;    
    } 
} 
+1

[转换春天XML文件的可能的复制Spring @Configuration类](http://stackoverflow.com/questions/2 4014919/convert-spring-xml-file-to-spring-configuration-class) – James

回答

3

我想你想达到什么是注射HelloWorld2实例为创建该HelloWorld@Bean的方法?

这应做到:

@Configuration 
public class Config { 
    @Bean 
    public HelloWorld helloWorld(HelloWorld2 helloWorld2){ 
     HelloWorld a = new HelloWorld(helloWorld2); 
     a.setAttr1("Demo Attr1"); 
     return a; 

    } 

    @Bean 
    public HelloWorld2 helloWorld2(){ 
     HelloWorld2 a = new HelloWorld2(); 
     a.setAttr2("Demo Attr2"); 
     return a;    
    } 
} 

这可能是这些问题的一个重复:

+0

它可以稍作修改。我还必须更改 HelloWorld a = new HelloWorld(); 到HelloWorld a = new HelloWorld(helloWorld2); 这是正确的方法吗? –

+0

是的,很好的地方。 – James

+0

但是现在,即使当我从HelloWorld构造函数中删除了@Autowired并且obj1.getH()的O/p给了我Demo Demo Attr2时,此代码仍在工作。它是如何发生的?我的意思是HelloWorld如何在没有自动装配的情况下获取HelloWorld2的实例? –