Spring和SpringMVC整合及关系
2021-01-14 18:11
标签:str XML zed bean font filter exp 表示 详细 SpringMVC扼要的讲,就是控制请求和处理。有必要将Spring和SpringMVC整合,否则仅配置SpringMVC并完成Spring的功能,会造成业务逻辑混乱。 简要总结:①原理:采用监听器,可以在ServlertContext加载时,通过监听器加载Spring的配置文件,创建Spring容器。②同时Spring提供的监听器ContextLoaderListener。下面为详细分析: 1、整合分析(模拟原理,SpringMVC可以通过在web.xml中直接配置): ①在配置文件中加入Spring的配置文件。但需要考虑,web容器启动以后,Spring的配置文件不会自动加载。加载需要ApplicationContext调用其实现类ClassPathXmlApplicationContext的构造方法,实现Spring配置文件的加载。 ②Spring配置文件什么时候加载?怎么加载? Spring配置文件的一定需要在web项目启动时加载,而且必须在Servlet配置前加载(为控制层的自动装载做准备,SpringMVC所管理的控制层依赖于Spring管理的service业务逻辑层)。采用监听器Listener(监听在web程序执行中的一些事件,比如ServletContext的生命周期,或者某一属性是否变化,监听的是一个动作)。ServlertContext,在web项目启动时就会创建。因此,可以创建一个监听器,来监听ServletContext的生命周期,一旦ServletContext创建,就去加载Spring的配置文件。 注意的问题: 1)SpringMVC和Spring配置文件,如果都配置包的扫描,可能会导致有的bean被创建2次。解决办法,在Spring配置文件扫描中去除控制层的扫描: 2)在监听器加载Spring配置文件时,在ServletContext中绑定ApplicationContext对象,从而能够在控制层中使用Spring管理的bean。 Spring.xml 2、SpringMVC配置: 注意:Spring的配置文件有默认的名字和位置,在WEB-INF文件下,名为applicationContext.xml 错误:BeanFactory not initialized or already closed,出现的三种情况: ①Spring的配置文件找不到(路径或名称不对) ②Spring的配置文件没有创建 ③Spring文件中出现了语法错误 Spring和SpringMVC关系 Spring为父容器,SpringMVC为子容器。 规定:子容器能够调用访问父容器中的bean,而父容器不能调用访问子容器中的bean. SpringMVC | Spring Controller | service dao Spring和SpringMVC整合及关系 标签:str XML zed bean font filter exp 表示 详细 原文地址:https://www.cnblogs.com/lemonzhang/p/12941423.html context:component-scan base-package="com.atguigu">
context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
context:component-scan>
package com.atguigu.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Application Lifecycle Listener implementation class SpringListener
*
*/
public class SpringListener implements ServletContextListener {
/**
* Default constructor.
*/
public SpringListener() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
ServletContext servletContext = sce.getServletContext();
servletContext.setAttribute("ac", ac);
}
}
package com.atguigu.controller;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.atguigu.bean.Teacher;
@Controller
public class TestController {
@RequestMapping("/testListener") //返回void,回去寻找与请求名一致的视图,即testListener。但实际中不会有void的情况
public void testListener(HttpSession session) {
//获取spring所管理的teacher对象
ServletContext servletContext = session.getServletContext();
ApplicationContext ac = (ApplicationContext)servletContext.getAttribute("ac");
Teacher teacher = ac.getBean("teacher", Teacher.class);
System.out.println(teacher);
}
}
xml version="1.0" encoding="UTF-8"?>
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
context:component-scan base-package="com.atguigu">
context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
context:component-scan>
bean id="teacher" class="com.atguigu.bean.Teacher">bean>
beans>
context-param>
param-name>contextConfigLocationparam-name>
param-value>classpath:spring.xmlparam-value>
context-param>
listener>
listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
文章标题:Spring和SpringMVC整合及关系
文章链接:http://soscw.com/index.php/essay/41882.html