小智 9
我找到了解决方案.问题是Spring没有为@WebService类自动装配bean (在其他论坛上可能是当前的bug).
解决方案:
使用org.springframework.beans.factory.config.AutowireCapableBeanFactory.class而不是使用@Autowired注释来注入bean(例如@Service,@Repository等).
所以:
包括 @Resource WebServiceContext
@Resource
private WebServiceContext context;
Run Code Online (Sandbox Code Playgroud)用它来获取你的bean
MyDAO myDAO = null;
ServletContext servletContext = (ServletContext) context
.getMessageContext().get("javax.xml.ws.servlet.context");
WebApplicationContext webApplicationContext = WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContext);
myDAO = (MyDAO) webApplicationContext
.getAutowireCapableBeanFactory().getBean("myDAO");
Run Code Online (Sandbox Code Playgroud)
MyDAO 课程可以如下:
@Service
@Qualifier("myDAO")
@Transactional
public class MyDAO {
private HibernateTemplate hibernateTemplate;
@Required
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public MyInfo getMyInfo(Long id){
return this.hibernateTemplate.get(MyInfo.class, id);
}
//...
}
Run Code Online (Sandbox Code Playgroud)在此之后,您可以myDAO在@WebMethod方法中使用对象.