Jax-ws 開發webService ,並使用spring注入service類


由於使用myeclipse自動生成的Delegate,所以在使用service實現層的時候,默認創建的時候都是使用new的方法;

這樣就導致每一次請求過來都得new一個新的;如果service有注入其他的service時,就會出現null的情況;

 

出現該情況,有兩種方法進行解決:

方法一,在serviceImpl實現成里面,使用的注入的service加一下null處理;

private ITestService testService;
private ITestService getTestService(){
  if(testervice==null){
    WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
    testService=(ITestService)context.getBean("testService");
  }
  return testService;

}
public void setTestService(ITestService service) {   this.testService = service; }

 

方法二,添加Delegate類中添加注入(也可以在你創建的service加)

主要就3個地方:(代碼標紅的地方)

1、繼承SpringBeanAutowiringSupport類;

2、Delegate實現類加注入@Controller;

3、在你需要注入的service加注入@Autowired

import javax.annotation.Resource;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;

@WebService(
  targetNamespace
= "http://service.com/",
  serviceName = "AuthCodeService",
  portName = "service/AuthCodeServicePort",
  wsdlLocation = "WEB-INF/wsdl/AuthCodeService.wsdl") @Controller public class AuthCodeServiceDelegate extends SpringBeanAutowiringSupport implements IAuthCodeServiceDelegate {
   // 這個是默認創建的 // com.service.AuthCodeService authCodeService
= new com.service.AuthCodeService(); @Autowired private IAuthSmsService authSmsService; public Result SendSmsCode( @WebParam(name="inaccessInfo") InaccessInfo inaccessInfo, @WebParam(name="record") Record record ) { inaccessInfo.setAccessSeq(inaccessInfo.getAccessSeq()+","+getClientInfo()); return authSmsService.sendSmsCode(inaccessInfo, record); } @Resource private WebServiceContext wsContext; /** * 獲取請求端IP地址 --(這個是贈送的) * <p>2017-4-14 上午10:15:08</p> */ private String getClientInfo(){ MessageContext mc = wsContext.getMessageContext(); HttpServletRequest request = (HttpServletRequest)(mc.get(MessageContext.SERVLET_REQUEST)); String remortAddress = request.getRemoteAddr(); return (remortAddress); } }

 

如發現其他方式,歡迎討論~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM