2011-04-28 3 views
0

JAX-WS 프로젝트에서 작업 중이며 이제는 내 유틸리티 중 하나에 종속성 주입을 추가하고 싶습니다.JAX-WS 프로젝트에서 Spring과 함께 DI를 사용할 때 NPE

유틸리티에는 인터페이스가 있습니다. GeocodeUtil 및 두 가지 구현 인 GeocodeUtilGoogleImpl 및 GeocodeUtilYahooImpl.

Heres는
<bean id="geocodeUtil" class="com.company.GeocodeUtilGoogleImpl"/> 
<bean id="myService" class="com.company.MyService"> 
    <property name="geocodeUtil" ref="geocodeUtil" /> 
</bean> 

내 web.xml을 (봄에 관련된 부분 만) : 나는 다음과 같은 한 내 applicationContext.xml에서

public class MyService { 
    private GeocodeUtil geocodeUtil; 
    /* getter and setter for geocodeUtil */ 
} 

: 자, 내 서비스 클래스에서 나는 다음이

<!-- Spring context --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationContext.xml</param-value> 
</context-param> 

<!-- Listeners --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

나는이면 MyService 개체의 인스턴스를 생성하고 geocodeUtil를 사용하려고 , 나는 NullPointerException이 있고 IT 구현이 주입되지 않았 음을 나에게 보인다. 이상하게 생각하는 점은 getter/setter를 제거하자마자 응용 프로그램이 시작될 때 충돌하고 Spring은 누락 된 setter/getter에 대해 불평하여 XML 구성이 실제로 올바르다 고 생각하게합니다.

스프링 관련 Java 주석을 사용하고 있지 않습니다.

도움을 주시면 대단히 감사하겠습니다.

답변

2

게시자가 명확하지는 않지만 응용 프로그램 컨텍스트에서 인스턴스를 검색하지 않는 것으로 의심됩니다. 그런 다음 호출하는 코드를 어떤 주석을 사용하지 않는 경우 귀하의이면 MyService 객체는 다음과 같이 일을하여 응용 프로그램 컨텍스트에서 빈을 가져올 필요가있다 : 당신이 제공 한

ServletContext servletContext =this.getServletContext(); 

WebApplicationContext wac = WebApplicationContextUtils. 
getRequiredWebApplicationContext(servletContext); 

MyService user = (MyService)wac.getBean("myService"); 

스프링 구성이 올바른지. 응용 프로그램 컨텍스트가 만들어 졌는지 확인하고 응용 프로그램 컨텍스트에서 개체를 검색해야합니다. 추가 정보를 원하시면 여기를 참조하십시오 :

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-client

+0

유익한 답변에 감사드립니다. 내가 대답에서 수집 한 것부터 주석을 사용하여 AppContext를 통해 bean을 가져야하는 것을 피할 수 있습니까? 저는 이전에 Wicket 프로젝트에서 Spring을 사용했고,이 프로젝트에서는 "@SpringBean"이라는 주석을 사용할 수있었습니다. 일반 Spring에 대해이 주석에 해당하는 항목이 있습니까? – John

+1

@Autowired를 사용하여 서비스 또는 @Resource를 연결할 수 있습니다. 두 주석에는 모두 +와 -가 있습니다. 스프링 문서를보십시오. 그러나 종속성을 주입하도록 웹을 구성해야합니다. 즉, 과 같은 내용을 응용 프로그램 컨텍스트에 추가해야합니다 (http://static.springsource.org/spring/ 참조). docs/3.0.x/spring-framework-reference/html/beans.html # beans-annotation-config) spring-mvc를 사용하지 않기 때문에 수행해야하는 다른 구성이있을 수 있습니다. –

2

당신은뿐만 아니라 Spring 컨텍스트에서 서비스 인스턴스를 얻어야한다.

new 연산자로 서비스 개체를 생성해도 스프링이 해당 인스턴스의 개체를 주입하지 않습니다.

관련 문제