【Spring注解驱动开发】面试官:如何将Service注入到Servlet中?朋友又栽了!!

文章介绍了如何在Spring框架中避免在每个Servlet中手动注入服务,通过创建DelegatingServletProxy代理类并配置在Web.xml中,实现了在Servlet启动时自动注入Service。作者还提醒了关于Bean命名和大小写的注意事项。
摘要由CSDN通过智能技术生成

.getWebApplicationContext(servletContext);

AutowireCapableBeanFactory autowireCapableBeanFactory = webApplicationContext

.getAutowireCapableBeanFactory();

autowireCapableBeanFactory.configureBean(this, BEAN_NAME);

}

这里的BEAN_NAME即为我们需要注入到Spring容器中的服务,但这并不是一个好的方法,因为我们需要在每一个Servlet中都进行这样的操作。

方法二:

我们可以写一个类似于“org.springframework.web.struts.DelegatingRequestProcessor”的委托的Bean,然后通过配置的方法把我们的服务注入到servlet中,具体方法如下,

Step 1:编写委托类DelegatingServletProxy

package com.telek.pba.base.util;

import java.io.IOException;

import javax.servlet.GenericServlet;

import javax.servlet.Servlet;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import org.springframework.web.context.WebApplicationContext;

import org.springframework.web.context.support.WebApplicationContextUtils;

/**

  • 以下是类似org.springframework.web.struts.DelegatingRequestProcessor的一个委托

  • 用于通过配置的方法,在Servlet中注入Service

  • @author binghe

  • */

public class DelegatingServletProxy extends GenericServlet{

private static final long serialVersionUID = 1L;

private String targetBean;

private Servlet proxy;

@Override

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException{

proxy.service(req, res);

}

/**

  • 初始化

*/

public void init() throws ServletException {

this.targetBean = getServletName();

getServletBean();

proxy.init(getServletConfig());

}

/**

  • 获取Bean

*/

private void getServletBean() {

WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());

this.proxy = (Servlet) wac.getBean(targetBean);

}

}

Step 2:修改Web.xml配置

在纯Servlet模式下,我们的配置方式如下(以下由于代码高亮插件的问题,请将代码中的#替换成尖括号)

活动发起模块活动查询分页Servlet

launchActivityQueryServlet

LaunchActivityQueryServlet

com.telek.pba.launch.servlet.LaunchActivityQueryServlet

LaunchActivityQueryServlet

/servlet/launch/LaunchActivityQueryServlet

如果采用我们这种代理的方法,则配置应该修改为:

活动发起模块活动查询分页Servlet

launchActivityQueryServlet

launchActivityQueryServlet

com.telek.pba.base.util.DelegatingServletProxy

launchActivityQuery

/servlet/launch/LaunchActivityQueryServlet

注意:默认情况下,Servlet的配置中,LaunchActivityQuery的首字母一般为大写,而我们的标题中已注明,我们采用Spring的注解模式,如果是自动扫描注解的话,默认情况下,注解的value值为首字母小写,即:launchActivityQuery,因此,在我们新的配置中,要注意将首字母改为小写,否则会报无法找到Bean的错误。

Step 3:至此,我们就可以像SSH的注入方式一样,注入Servlet了,以下是个小示例:

package com.telek.pba.launch.servlet;

import java.io.IOException;

import javax.annotation.Resource;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。

我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

面试题及解析总结

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

大厂面试场景

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

知识点总结

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
…(img-DLOSxvfU-1712709362931)]

大厂面试场景

[外链图片转存中…(img-XhdprDew-1712709362931)]

知识点总结

[外链图片转存中…(img-vfvf5tKo-1712709362932)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值