2009-06-04 2 views
2

저는 첫 번째 java struts2 webapp에서 작업 중이며 호출되는 임의의 클래스에 빈 매개 변수를 삽입 할 수 있기를 원합니다. 하지만 클래스에서 applicationContext beans를 사용하는 방법은 무엇입니까?

이의 내가 내 applicationContext.xml 파일이 빈 있다고 가정 해 봅시다 ... 난 단지 스트럿 액션 클래스와 함께이 작업을 수행 할 수 있다는 것을 발견 :

<bean id="BeanTest" class="BeanTest"> 
    <property name="test" value="someval" /> 
</bean> 

나는 BeanTest라는 스트럿츠의 액션 클래스 설정이있는 경우 (그렇게), setter (public void setTest())를 추가하면 테스트 매개 변수가 설정되고 액세스 할 수 있습니다.

import com.opensymphony.xwork2.ActionSupport; 

public class BeanTest extends ActionSupport{ 
    private String test; 

    public String execute(){ 
     String str = getTest(); // returns "someval" 
     return "success"; 
    } 

    public void setTest(String test){ 
     this.test = test; 
    } 

    public String getTest(){ 
     return test; 
    } 
} 

그러나,이 전과 같이 BeanTest2에 콩을 변경 가정 해 봅시다 :

<bean id="BeanTest2" class="BeanTest2"> 
    <property name="test" value="someval" /> 
</bean> 

그리고 독립 클래스과 같이이 : 나는 BeanTest2의 인스턴스를 만드는 경우

public class BeanTest2{ 
    private test; 

    public void setTest(String test){ 
     this.test = test; 
    } 

    public String getTest(){ 
     return test; 
    } 
} 

BeanTest에서 getTest를 호출하면 항상 null을 리턴한다. 나는 임의의 클래스를 가리킬 수 있습니다 그 클래스는 항상 내가 (내가 그들을 위해 setter를 만든 가정) 세트 어떤 콩 매개 변수를 얻을 수 있도록 애플리케이션 컨텍스트 내 bean을 설정하고 싶은 무엇

import com.opensymphony.xwork2.ActionSupport; 

public class BeanTest extends ActionSupport{ 
    public String execute(){ 

     BeanTest2 bt = new BeanTest2(); 
     String str = bt.getTest(); //returns null, but I want "someval" 

     return "success"; 
    } 
} 

. 불행하게도, struts 액션 클래스 만이 bean 프라퍼티를 얻을 수있다. 모든 것이 설정되지 않습니다.

이 질문은 확실합니까? 나는 콩 작동 방식에 대해 확실한 것을 놓치고있는 것처럼 느껴진다.

답변

2

스프링은 스프링에 의해 생성 된 클래스에 대해서만 의존성 주입을 수행 할 것이고 새로운 연산자로 자신을 생성하는 클래스에 대해서는 의존성 주입을 정상적으로 수행 할 것이라고 생각합니다.

BeanTest는 Spring에 의해 만들어 지므로 종속성이 주입되지만 BeanTest2는 Spring에 의해 생성되지 않으므로 Spring은 BeanTest2 인스턴스에 대해 아무 것도 모릅니다.

당신은 그럼 당신은 인스턴스를 beanTest하는 beanTest2를 삽입 할 수

public class BeanTest { 
    private BeanTest2 beanTest2; 
    public void setBeanTest2(BeanTest2 b) { this.beanTest2 = b; } 
    public BeanTest2 getBeanTest2() { return this.beanTest2; }; 
} 

BeanTest

에 필드로 BeanTest2을 추가 할 수 있습니다.

<bean id="beanTest2" class="BeanTest2"> 
    <property name="test" value="someval" /> 
</bean> 

<bean id="beanTest" class="BeanTest"> 
    <property name="beanTest2" ref="beanTest2" /> 
</bean> 

이렇게하면 beanTest2가 BeanTest 인스턴스에 삽입되어야합니다.

+0

BeanTest에 Bean을 설정하고 결과 매개 변수를 BeanTest2 생성자에 전달하는 유일한 방법은 무엇입니까? BeanTest2 (테스트)와 비슷합니다. ? –

+0

@Adam, 그렇게 할 수도 있고 BeanTest2를 직접 BeanTest에 삽입 할 수도 있습니다 (편집 된 답변 참조). ApplicationContext 인스턴스에 대한 참조를 가져 와서 BeanTest2를 직접 가져올 수 있습니다. –

+0

@Juha, BeanTest에 문자열 "beanTest2"를 전달하지 않으시겠습니까? –

관련 문제