WebService对象调用spring注解

简介: WebService对象调用spring注解

前言:前面一文写完了webservice的通信,然后接下来在实际项目中发现了webservice类中无法直接使用spring注解过的属性,又经过将近一天的调查,脑子几乎僵硬了,自己差点放弃,在领导的帮助下最终找到解决方案,就赶紧总结下来,人贵有思,好记忆不如烂笔头,记录下来就是资源。



首先,如果你是这样直接使用的话,对象是空的,如下图,moneyuserDAO是无法直接使用的,即使spring已经对其进行加载,但是在webservice中是不能直接使用的,但是spring加载的访问数据库持久层的DAO对象等会存储在WebApplicationContext中,那么我有了以下的方式



第一步:写好以下的单例内容


package com.ebiz.cms.webservice;
import org.springframework.web.context.WebApplicationContext;
public class ServicesSingleton {
  private WebApplicationContext servletContext;
  public WebApplicationContext getServletContext() {
  return servletContext;
  }
  public void setServletContext(WebApplicationContext servletContext) {
  this.servletContext = servletContext;
  }
  private volatile static ServicesSingleton singleton;
  private ServicesSingleton() {
  }
  public static ServicesSingleton getInstance() {
  if (singleton == null) {
    synchronized (ServicesSingleton.class) {
    if (singleton == null) {
      singleton = new ServicesSingleton();
    }
    }
  }
  return singleton;
  }
  public Object getDAO(Class<?> classNameOfDAO) {
  String implName = classNameOfDAO.getSimpleName();
  String firstChar = implName.substring(0, 1);
  implName = firstChar.toLowerCase() + implName.substring(1) + "Impl";
  return singleton.getServletContext().getBeansOfType(classNameOfDAO).get(implName);
  }
}

注意里面最重要的getDAO方法和单例的实现方式,通过WebApplicationContext的getBeansOfType方法找到对应的DAO类。




第二步:编写tomcat启动时加载WebApplicationContext的类和xml配置


package com.ebiz.cms.webservice;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class InitServlet extends HttpServlet {
  /**
  * 
  */
  private static final long serialVersionUID = -3962535683227715257L;
  @Override
  public void init() throws ServletException {
  WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
  ServicesSingleton.getInstance().setServletContext(ctx);
  }
}
 <servlet>
      <servlet-name>initServlet</servlet-name>
      <servlet-class>com.ebiz.cms.webservice.InitServlet</servlet-class>
      <load-on-startup>0</load-on-startup>
</servlet>

以上,就会将对应的WebApplicationContext对象加载到单例中,然后我们再在webservice对象中通过getDAO方法获取对应的DAO对象对数据库进行持久层操作


public String createMemPxy(String username, String password, String mobile, String email, String type) {
  try {
    ServicesSingleton single = ServicesSingleton.getInstance();
    MembersDAO memberDAO =  (MembersDAOImpl)single.getDAO(MembersDAO.class);

以上只写出service对象的service方法片段



总结:我在此过程中卡到了一个点就是,我没有通过webservice之间的访问方式去获取对象的单例,而是通过在service类中写main方法去测试调用单例,却发现在main方法中怎么都不会获取tomcat启动时初始化好的单例,这是一个低级错误,因为经过一天的调查,脑子基本上以及僵硬了,不过经过领导的指点后,顺利的解决了该问题。这样,整体的Java调用webservice以及关联spring的持久层操作就搞定了,舒心啊!

相关文章
|
12月前
47SpringMVC - 参数绑定(绑定包装pojo)
47SpringMVC - 参数绑定(绑定包装pojo)
30 0
|
API
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果。前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html
598 0
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
|
NoSQL 安全 Java
踩坑篇之WebSocket实现类中无法使用@Autowired注入对象
踩坑篇之WebSocket实现类中无法使用@Autowired注入对象
190 0
|
Java Spring 容器
通过反射获得并调用类的方法导致@Autowired注入失效的解决方案
通过反射获得并调用类的方法导致@Autowired注入失效的解决方案
503 0
|
Java Spring 容器
SpringBoot (走读源码)静态方法中调用spring注入的对象,注入对象为null?
SpringBoot (走读源码)静态方法中调用spring注入的对象,注入对象为null?
421 0
SpringBoot (走读源码)静态方法中调用spring注入的对象,注入对象为null?
|
XML 存储 Java
WebService对象调用spring注解
WebService对象调用spring注解
166 0
|
XML 数据格式 网络架构
httpclent调用webservice
httpclent调用 webservice   wsdl后缀服务 1.jar包: commons-logging-1.
1522 0
|
C# 数据格式 XML
C# 调用WebService的方法
很少用C#动态的去调用Web Service,一般都是通过添加引用的方式,这样的话是自动成了代理,那么动态代理调用就是我们通过代码去调用这个WSDL,然后自己去生成客户端代理。更多的内容可以看下面的两个地址:http://blog.
1074 0
下一篇
无影云桌面