spring面试相关总结
来源:互联网 发布:星空棒棒糖淘宝网 编辑:程序博客网 时间:2024/05/21 21:50
1、spring控制器的类名
org.springframework.stereotype.Controller
其他的介绍:
org.springframework.stereotype.Service
org.springframework.web.context.ContextLoaderListener
ContextLoaderListener
在web项目启动时候创建 Spring环境的(初始化ioc容器),并且把ioc(Inversion Of Control反向控制器)容器放入ServletContext中(可以打印出key来查看)。
contextConfigLocation是一个全局变量名。
查看ContextLoader的源码:
public static final String CONFIG_LOCATION_PARAM = "contextConfigLocation";93行;
wac.setConfigLocation(servletContext.getInitParameter(CONFIG_LOCATION_PARAM));253行
可以看出,是listener执行的时候,获取的初始化变量而已。
DispatcherServlet
核心控制器,和struts2中的filter,dwr中的dwrServlet,一样的前置控制器。 拦截请求,分发请求。
2、ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在DispatcherServlet中也可以来加载spring context配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>ddd</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>---------也可以加载application.xml
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
DispatcherServlet所加载的applicationContext可以认为是mvc私有的context,由于保存在servletContext中的key值与通过ContextLoaderListener加载进来的applicationContext使用的 key值不相同,因此如果只使用DispatcherServlet加载context的话,如果程序中有地方使用 WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext) 来试图获取applicationContext时,就会抛出"No WebApplicationContext found: no ContextLoaderListener registered?"的exception。
3、spring事物失效问题解决
http://icanfly.iteye.com/blog/778401
a.applicationContext.xml中,去掉对controller的扫描
<context:component-scan base-package="com.trans">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<property name="dataSource" ref="dataSource" />
</bean>
b.**-servlet.xml 中,去掉对 service的扫描,加入对controller的扫描
<context:component-scan base-package="com.trans">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
c.事务的配置只有在 applicationContext.xml中才会起作用,即
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
必须配置在 applicationContext.xml 中
d.用事务去控制的service,不能加try catch去捕获异常,否则不能被spring拦截到,事务就失效了。
因为spring的context是父子容器,所以会产生冲突,由ServletContextListener产生的是父容器,springMVC产生的是子容器,子容器Controller进行扫描装配时装配了@Service注解的实例,而该实例理应由父容器进行初始化以保证事务的增强处理,所以此时得到的将是原样的Service(没有经过事务加强处理,故而没有事务处理能力。还有一种方式是将service层改用xml配置,其实这样做也是变相的让springmvc无法扫描service,而只能依赖父窗口也就是ServletContextListener来进行初始化,这样同样被赋予了事务性。
4、spring中lib中常用的jar包
cglib-2.2.jar GLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充
commons-beanutils-1.8.3.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
httpclient-4.2.1.jar
jackson-all-1.9.10.jar
log4j-1.2.15.jar
mail.jar
servlet-api.jar
jsp-api.jar
5、spring @ResponseBody返回json格式数据(list map 结构体等自动转换)
在dispatherservlet中扫描的srpingmvc-servlet中配置
<bean name="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
参考 spingmvc3 返回json
6、web.xml元素及加载顺序
首先可以确定的一点是, 不同类型节点的加载顺序与它们在web.xml里出现的次序无关,即不会因为filter写在listener之前而先加载fiter.
就<context-param>、<listener>、<filter>、<servlet>四种节点而言,启动服务器时的加载顺序是context-param --> listener --> filter --> servlet
首先是<context-param>,启动一个WEB项目的时候,WEB容器会读取配置描述符文件(web.xml)中的<context-param>节点信息。<context-param>它用于向 ServletContext 提供键值对,即应用程序上下文信息。在初始化listener, filter和servlet时到可能会用到这些信息。
7、Spring框架下获取Bean的几种方式
http://blog.csdn.net/wayfoon322/article/details/2420541
通过xml配置文件bean配置在xml里面,spring提供多种方式读取配置文件得到ApplicationContext.
第一种方式:FileSystemXmlApplicationContext
通过程序在初始化的时候,导入Bean配置文件,然后得到Bean实例:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml")
ac.getBean("beanName");第二种方式:WebApplicationContextUtil
在B/S系统中,通常在web.xml初始化bean的配置文件,然后由WebAppliCationContextUtil得到ApplicationContext.例如:
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);其中 servletContext sc 可以具体 换成 servlet.getServletContext()或者 this.getServletContext() 或者 request.getSession().getServletContext();
另外,由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出WebApplicationContext 对象:
WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
getRequiredWebApplicationContext和 getWebApplicationContext的区别是,获取失败时候,getRequiredWebApplicationContext抛出异常,getWebApplicationContext抛出null
8、Spring注解@Component、@Repository、@Service、@Controller区别
@Component是通用的
@Repository、@Service、@Controller则是细化Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。
9、@RequestParam必选参数如果没有发过来有什么办法?
当@RequestParam的时候,既可以使用@ExceptionHandler来自定义处理返回错误界面或者字符串
还可以使用AOP进行前置处理(配合 required=fasle进行前置默认值补救处理)。或者Parameters using this annotation are required by default, but you can specify that a parameter is optional by setting
@RequestParam
'srequired
attribute tofalse
(e.g.,@RequestParam(value="id", required=false)
).
10、一个request的处理流程
17:13:19,375 DEBUG DispatcherServlet:824 - DispatcherServlet with name 'springmvc' processing GET request for [/SpringServer/wx1/aop_two]
17:13:19,391 DEBUG RequestMappingHandlerMapping:220 - Looking up handler method for path /aop_two
17:13:19,391 DEBUG RequestMappingHandlerMapping:227 - Returning handler method [public java.lang.Object com.control.WXControl.aop_schema_two(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)]
17:13:19,391 DEBUG DefaultListableBeanFactory:245 - Returning cached instance of singleton bean 'WXControl'
17:13:19,391 DEBUG DispatcherServlet:933 - Last-Modified value for [/SpringServer/wx1/aop_two] is: -1
17:13:19,422 DEBUG WXControl:314 - aop_two schema 配置方法!................
17:13:19,469 DEBUG RequestResponseBodyMethodProcessor:140 - Written [aop_two] as "text/html" using [org.springframework.http.converter.StringHttpMessageConverter@110195c]
17:13:19,485 DEBUG DispatcherServlet:1023 - Null ModelAndView returned to DispatcherServlet with name 'springmvc': assuming HandlerAdapter completed request handling
17:13:19,485 DEBUG DispatcherServlet:962 -Successfully completed request
- spring面试相关总结
- 面试总结------Spring框架相关
- 面试之Spring相关
- Android 面试相关总结
- Activity相关面试总结
- TCP面试相关总结
- Spring面试知识点总结
- Spring面试总结
- Spring面试总结
- Spring面试知识点总结
- spring面试问题总结
- Spring面试总结1!
- Spring面试知识点总结
- Spring面试总结
- Spring面试总结
- spring框架面试相关问题
- Spring相关注解总结
- 面试相关的一些总结
- SVD因式分解实现协同过滤-及源码实现
- 【突发】纽约曼哈顿中城发生爆炸
- Java Servlet和JSP教程
- linux pmap命令
- LA 5031 Graph and Queries (Treap + 并查集)
- spring面试相关总结
- 几个很有用的 jQuery 技巧
- 《Head First 设计模式》外观模式
- 大数据应用,用过滤器从背景噪音中分离重要信息
- speex
- Android的开机流程
- 银河证券血案 银河证券发生血案官方称死者留有遗书为自杀
- 生产者_消费者2
- Leetcode_Reverse-Words-in-a-String