간단한 것을 놓치고 있어야하지만, Autowired 속성을 빈에 할당하는 데 문제가 있습니다. = 구성 요소 스캔 기본 패키지 "..."/ > 웹 서비스에서 Autowired가 작동하지 않습니다.
- : 여기에 게시 된 모든 유사한 응답은 3 가지 솔루션을 중심으로 돌고있는 것 같다
applicationContext.xml
DAO 인터페이스 :
package wb;
public interface FooDAO {
public String doNothing();
}
DAO 구현 : 분사
package wb;
import org.springframework.stereotype.Component;
@Component
public class FooDAOImpl implements FooDAO {
public FooDAOImpl() {
System.out.println("FooDAOImpl: Instantiated " + this);
}
@Override
public String doNothing() {
System.out.println("FooDAOImpl: doNothing() called");
return "Did nothing!";
}
}
웹 서비스 : 콩 태그 내에서
package ws;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import wb.FooDAO;
@WebService(serviceName = "WS")
public class WS extends SpringBeanAutowiringSupport {
@Autowired(required = true)
private FooDAO fooDAO;
@WebMethod(exclude = true)
public void setFooDAO(FooDAO fooDAO) {
this.fooDAO = fooDAO;
System.out.println("WS: fooDAO set = " + fooDAO);
}
public WS() {
System.out.println("WS: WS bean instantiated!");
}
@WebMethod(operationName = "doNothing")
@WebResult(name = "whatDidIDo")
public String doNothing() {
System.out.println("WS: doNothing() says DAO = " + fooDAO);
return fooDAO == null ? "Could not do nothing!" : fooDAO.doNothing();
}
}
applicationContext.xml 내용 :
<context:annotation-config />
<context:component-scan base-package="ws"/>
<bean id="fooDAO" class="wb.FooDAOImpl" />
이것은 모두 Spring과 Hibernate 프레임 워크로 생성 된 프로젝트의 최신 NetBeans에서 생성되었습니다. 나는 보스에 배포하고, 응용 프로그램이 시작되면, 내가 예상 콩 인스턴스화 얻을 : 나는 웹 서비스를 호출하면
11:01:46,767 INFO [stdout] (MSC service thread 1-6) WS: WS bean instantiated!
11:01:47,571 INFO [stdout] (MSC service thread 1-15) FooDAOImpl: Instantiated [email protected]
을, 로그도보고 : 나는 무엇을 놓치고
11:03:07,097 INFO [stdout] (http--127.0.0.1-8080-1) WS: doNothing() says DAO = null
?
감사합니다. 그것이 이전에 시도했던 것들 중 하나라고 맹세 할 수 있습니다. @Component를 추가하면 작동합니다. – user3207820
@ user3207820 기꺼이 도와 드리겠습니다. 나는 Spring을 사용할 때 초기에 같은 개념으로 고심했다. 언제든지'new' 키워드를 사용하면 잠시 멈추고 궁금해 할 필요가 있습니다. –
응용 프로그램 시작 중에 작성된 WS 인스턴스는 자동 배선 DAOImpl을 가져옵니다. 그러나 웹 서비스를 호출 할 때 요청을 처리하기 위해 다른 WS 인스턴스가 만들어지며 그 인스턴스는 인스턴스를 가져 오지 않습니다. 기묘한. 어쨌든, 다시 한번 감사드립니다. – user3207820