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事务正常,求指正的主要内容,如果未能解决你的问题,请参考以下文章
用实例证明@Autowired和@Resource注解先通过Type还是Name注入
从头认识Spring-2.3 注解装配-@autowired-通过构造器方法注入
阿昌教你解决Filter过滤器@Autowired注入调用为null的问题
Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的