Servlet通过 @Autowired注入service后事务失效,但是controller其它注入service事务正常,求指正

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet通过 @Autowired注入service后事务失效,但是controller其它注入service事务正常,求指正相关的知识,希望对你有一定的参考价值。

  简单来说Spring Framework是一个运行时对象管理容器。只有受它管理的对象,才可以通过@Autowired注解来获取另外一个受它管理的对象。
  也就是说你的Dao、Service文件一样需要被Spring扫描到并管理。解决方法是以配置Controller等方式配置Dao和Service。
  如:
  //扫描Dao和Service实现类包
  <context:component-scan base-package="com.cnwaterinfo.csp.service">
  <context:component-scan base-package="com.cnwaterinfo.csp.dao">
  根据JPA规范,建议使用@Resource注解来获取对象。
参考技术A 用原Serlvet,配置ContextLoaderListener监听器,在Servlet的方法中使用
WebApplicationContextUtils的getRequiredWebApplicationContext()方法获取上下文中的ApplicationContext,进而通过getBean()获取到Spring的Bean,不过这过程就需要你自己编码手工实现了

spring boot servlet 注入

spring boot 注入servlet的方法是借助ServletRegistrationBean这个类

例子如下:

先建一个servlet

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("你的特殊的servlet。。。哦....");
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

然后注入即可:

    @Bean
    public TestServlet servlet(){
        return new TestServlet();
    }
    
    @Bean
    public ServletRegistrationBean testServlet(TestServlet servlet) {
        ServletRegistrationBean registration = new ServletRegistrationBean(servlet);
        registration.setEnabled(true);
        registration.addUrlMappings("/servlet/test");
        return registration;
    }

最后访问的接口地址即可看见效果了

 

这种运用场景是当你的项目引用第三方插件的时候注入servlet的时候产生,或者你不用springmvc。

以上是关于Servlet通过 @Autowired注入service后事务失效,但是controller其它注入service事务正常,求指正的主要内容,如果未能解决你的问题,请参考以下文章

spring boot servlet 注入

用实例证明@Autowired和@Resource注解先通过Type还是Name注入

从头认识Spring-2.3 注解装配-@autowired-通过构造器方法注入

阿昌教你解决Filter过滤器@Autowired注入调用为null的问题

Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的

jdbcTemplate通过@Autowired自动注入时,值为null的问题