2011-07-02 2 views
1

Struts2 + Spring + hibernate로 작은 응용 프로그램을 개발 중입니다. 스프링 빈이 서버 시작시 제대로 주입됩니다. 시작시 setter를 통해 밟았습니다. 그들은 제대로 주입하고 있습니다. 그러나 post 메서드를 실행 한 다음 post 메서드 (struts2에서 execute())를 실행하면 주입 된 값이 null입니다. 왜 이런 일이 생길까요?스프링 생성자 주입에 null이 표시됨

콩 주입은 :

<bean id="userAction" class="com.example.user.action.UserAction"> 
     <constructor-arg index="0"> 
      <ref bean="UserServiceTarget"/> 
     </constructor-arg> 
</bean> 

내 Struts2 생성자이다

public UserAction(IUserService userService) 
    { 
     this.userService=userService; 

    } 

Struts2 방법은 :

public String execute() { 
     this.user=(User)userService.findById(this.id); 
} 

그러나 내부 메소드 userService가 NULL 실행 ... 때 나는 그들이 주사를 맞춰 주사한다 ..

고맙습니다 ...

+1

또한 질문을 편집하고 전체 UserAction 클래스와 전체 컨텍스트를 추가 할 수 있습니까? – andyb

답변

2

나는 constructor-args가 콩을 다른 것으로 이터 닝하는 방법이 아니라고 생각합니다. 나는 당신에게 예를들 :

applicationContext.xml :

<bean id="userAction" class="com.example.user.action.UserAction"/> 
<bean id="userServiceTarget" class="com.example.user.UserServiceTarget"> 

UserAction.java :

@Autowired 
private UserServiceTarget userService; 

당신은 다른 설정을 사용할 수 있습니다. 예를 들어 :

<bean id="userAction" class="com.example.user.action.UserAction"> 
<property name="userService" ref="UserServiceTarget"/> 
</bean> 

를 autowire 주석이 필요하지 이런 식으로 만 세터.

xml이별로 좋지 않으므로 Stereotype 특수 효과를 사용하는 것이 가장 좋습니다. 당신은 당신의 서비스 클래스에 @Service 어노테이션을 사용할 수 있습니다 당신은 appcontext에서 빈을 선언하는 것을 잊지 수 있지만 두 줄이 방법을 추가해야합니다 : 나는 도움이

<context:annotation-config /> 

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

희망!

+0

고마워 lepike .... 괜찮아요 ... 내 질문은 내 코드에서 잘못된 건데, 내가 생성자 삽입을 사용할 때 ... – Muthu

+0

당신을 오해해서 죄송합니다. 내가 해결 방법을 준거야. 나는 당신의 코드에 어떤 문제가 있는지 모른다. 생성자 주입 또한 작동해야합니다. UserServiceTarget의 bean 정의는 무엇입니까? 아마도 bean의 id 속성의 이름을 확인해야 할 것입니다. 희망 솔루션을 찾으십시오. – lepike