首页 文章

spring 2.5.5和自动装配的平针织物

提问于
浏览
0

我正在尝试将jersey整合到现有的Spring应用程序中(Spring 2.5.5) . Jersey工作正常,但是当我自动连接现有的spring bean时,该对象为null . 下面是我的web.xml

<servlet>
    <servlet-name>fs3web</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.fl.fs3.api;org.codehaus.jackson.jaxrs</param-value>
    </init-param>
    <init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
         <param-value>true</param-value>
</init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>fs3web</servlet-name>
    <url-pattern>/fs3/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

而且,这里是我的应用程序上下文xml(显然这不完整,因为这是一个巨大的应用程序,还有更多的bean定义):TestPojo是我的bean我想自动装入我的jersey资源 .

<context:annotation-config />  
<aop:aspectj-autoproxy/> 
<context:component-scan base-package="com.fl.fs3.api,com.fl.fs3.integration.*.web"/>

我的jersey资源类和POJO类都在包 com.fl.fs3.api

@Component
@Path("/v1/site")
public class SitesApiControllerV1 {
    @Autowired TestPojo  testPojo;

    @GET
    @Path("/{folderName}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getSite(@PathParam("folderName") String folderName) {
         System.out.println("pojo obj:" + testPojo);
         return Response.ok("info for " + folderName).build();
}
}

@Component
public class TestPojo {

}

当我启动我的tomcat时,我在日志中看不到预期的行: INFO: Registering Spring bean, hello, of type ..... as a root resource class 当我调用我的服务 /v1/site/xyz 时,testPojo对象为null .

但是,在将它集成到我现有的项目之前,我做了一个样品平针织 spring 应用程序,它运行得很好 . 我能够在日志中看到“注册Spring bean”行 .

任何帮助表示赞赏 .

1 回答

  • 0

    试试这个,可能会更简化:

    通过 web.xml 加载 spring ,如下图所示为普通 spring 配置:

    <servlet>
        <servlet-name>project-spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:project-spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>project-spring</servlet-name>
        <url-pattern>*.htm</url-pattern>
      </servlet-mapping>
    

    现在通过Application加载你的球衣资源,如下所示:

    @ApplicationPath("/rest")
    public class ResourceLoader extends Application
    {
    
        /* (non-Javadoc)
         * @see javax.ws.rs.core.Application#getClasses()
         */
        @Override
        public Set<Class<?>> getClasses()
        {
            Set<Class<?>> classes = new HashSet<Class<?>>();
            loadResourceClasses(classes);
            return classes;
        }
    
        private void loadResourceClasses(Set<Class<?>> classes)
        {
            classes.add(StudentResource.class);
        }
    }
    

    然后在你的资源中:

    @Path("student")
    class StudentResource
    {
        private StudentService studentService;
    
        StudentResource(@Context ServletContext servletContext)
        {
            ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
            this.transactionService = applicationContext.getBean(StudentService .class);
        }
    }
    

    你去吧Spring已经配置了Jersey的所有依赖注入!

相关问题