`
m635674608
  • 浏览: 5044144 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring 和 springmvc 的父子容器关系浅析

 
阅读更多

以###问题###
在工程项目中,一开始将所有的附件路径定义在工具类中。使用 static String 的形式;于是就在项目的开发过程中产生不便,也使得配置属性不灵活,不利于模块化的管理信息和提高项目的可扩展性以及维护性。因此就将项目的属性常量抽取 出来,配置的属性文件中。但在此过程中产生了在@controller 注解的模块中无法加载在属性文件配置的常量。 同时也使用了@service 注解层注入常量的方法。但均已失败告终。
最后在分析了spring 和 spring mvc 的源码和属性文件之间在web中的加载顺序和相互之间的关系。解决了此问题。以下是分析解决的过程。

 

代码

 

web.xml

 

    <display-name>demo-manager</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!-- 初始化spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext-*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--解决post乱码-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- springmvc的前端控制器 -->
    <servlet>
        <servlet-name>demo-manager</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo-manager</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

 

spring-mvc.xml

 

        <!--配置包扫描器-->       
        <context:component-scan base-package="com.demo.controller"></context:component-scan>
        <!--配置注解驱动-->
        <mvc:annotation-driven/>
        <!--试图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean> 
        <!--静态资源映射-->
        <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
        <mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
</beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

 

application-dao.xml

 

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:properties/*.properties"/>    
    <!-- 数据路连接池 --> 
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="maxActive" value="10"/>
        <property name="minIdle" value="5"/>
    </bean>
    <!-- spring管理sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--数据库连接池-->
        <property name="dataSource" ref="dataSource"/>
        <!--加载mybatis的全局配置文件-->
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />       
    </bean> 
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.demo.mapper"/>
    </bean>      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

 

以上的配置文件可以解决@service 中@value(“${ATTPATH}’) .
同时要想解决在@controller 层中注入属性配置文件中的值,经过自己测试,存在三种方式:

 

1.get set 方法

 

(1)在@service 中 注入:

 

@Value("${ATT_PATH}")
private String attPath;
  • 1
  • 2

 

(2)然后get set

 

(3)在@controller 中获取值。

 

2,公有化 @service中注入的值

 

@Value("${ATT_PATH}")
public  String attPath;
  • 1
  • 2

 

3.在spring-mvc.xml 中加载属性配置文件

 

<!-- 加载文件上传路径配置文件 解决@controller 中无法注入配置文件中的属性 -->
<context:property-placeholder location="classpath*:file.properties"/>
  • 1
  • 2

 

这样可以直接在@controller 中注入配置的属性文件

 

@Value("${ATT_PATH}")
private String attPath;
  • 1
  • 2

 

关于spring 和spring MVC的父子容器关系

在web.xml 中只加载spring-mvc.xml 则是没有问题的。但是只加载spring.xml 是错误的。
spring 是父容器, springmvc 是子容器,子容器可以使用父容器的对象,但是父容器是不能使用子容器的对象的。注意,这里是对象。在实际的项目中。我们通常是在spring.xml 中加载我们在资源包下定义的属性文件的,于是,我们也只有在@service 层中通过@value(“

 

http://m.blog.csdn.net/article/details?id=51088414

 

 

..)@controller使springmvc.xml@contrller@value(

分享到:
评论

相关推荐

    Spring和SpringMVC父子容器关系

    在Spring与SpringMVC的整合应用中,它们之间存在着一种特殊的父子容器关系,这种关系对于理解和优化应用的配置及管理非常重要。 首先,让我们深入理解Spring容器。Spring容器主要分为两种类型:ApplicationContext...

    Spring和SpringMVC父子容器关系初窥(小结)

    Spring和SpringMVC父子容器关系是一个非常重要的概念,在项目中引入Spring和SpringMVC这两个框架时,它们之间存在着父子容器关系。了解这个关系对解决包扫描问题和配置文件的理解非常重要。 一、背景 在项目中引入...

    浅谈Spring与SpringMVC父子容器的关系与初始化

    总结起来,Spring与SpringMVC的父子容器关系是Java Web开发中的一种设计模式,它允许开发者将应用程序的不同部分分开管理,提高代码的可维护性和复用性。理解这一关系以及初始化过程对于深入掌握Spring框架和Spring ...

    Spring+SpringMVC+Hibernate框架集成详解

    本文档旨在详细介绍 Spring、SpringMVC 和 Hibernate 框架的集成,旨在帮助开发人员快速了解这三个框架的集成过程。 Spring 框架 Spring 框架是一个 Java 语言的开源框架,旨在简化 Java 应用程序的开发。Spring ...

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码.zip

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...

    完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip

    完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统...

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...

    spring和springMVC整合源码

    本文将深入探讨"Spring和SpringMVC整合"的相关知识点,以及如何创建一个简单的"Hello, World!"示例。 1. **Spring框架核心概念** - **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,通过DI,...

    Java进阶Spring和springMVC详细示例精通教程资料.7z

    传智播客Java进阶Spring和springMVC详细示例精通教程资料 传智播客Java进阶Spring和springMVC详细示例精通教程资料 传智播客Java进阶Spring和springMVC详细示例精通教程资料

    基于Spring+SpringMVC+Mybatis架构的博客系统.zip

    基于Spring+SpringMVC+Mybatis架构的博客系统:博客管理、图表数据、日志分析、访问记录、图库管理、资源管理、友链通知等。良好的页面预加载,无限滚动加载,文章置顶,博主推荐等。提供 用户端+管理端 的整套系统...

    spring/springmvc/mybatis所需jar包

    在Java开发领域,Spring、SpringMVC和MyBatis是三个非常重要的框架,它们共同构建了一个强大而灵活的Web应用程序栈。Spring作为一个全面的后端开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地...

    Spring+SpringMVC+Mybatis资源课件

    1.2 企业级应用概述.pptx和2 Spring概述.pptx可能涵盖了Spring框架的基础概念,包括容器如何管理对象的生命周期以及如何通过XML或注解配置依赖关系。 SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的...

    spring+springmvc+mybatis

    在Java企业级应用开发领域,Spring、SpringMVC和MyBatis是三个不可或缺的重要组件,它们共同构建了一个强大的、灵活的和可扩展的应用框架。这篇文章将深入探讨这三个框架的核心概念、工作原理以及如何将它们整合在...

    idea工具创建的Spring+SpringMVC+Hibernate+maven项目

    在本项目中,Maven负责管理Spring、SpringMVC、Hibernate以及其他依赖库的版本和下载。 这个项目对于初学者来说是一个很好的学习平台,因为它涵盖了Java Web开发的核心技术。通过学习这个项目,你可以了解如何设置...

    Spring和SpringMVC面试问题总结(15个)

    Spring和SpringMVC面试问题总结 1.Spring中AOP的应用场景、Aop原理、好处? 2.Spring中IOC的作用与原理?对象创建的过程。 3.介绍spring框架 4.Spring常见创建对象的注解? 5.Spring中用到的设计模式 6.Spring的优点...

    基于spring+springMvc+mybatis 开发的企业门户网站

    基于spring+springMvc+mybatis 开发的企业门户网站基于spring+springMvc+mybatis 开发的企业门户网站,适合具有一定编程基础,比如计算机专业的大学生或者1-3年工作经验的开发人员。手写简化版 Spring 框架,了解 ...

    Spring+SpringMVC+Mybatis框架项目整合

    在IT行业中,Spring、SpringMVC和Mybatis是三大非常重要的Java开发框架,它们的组合应用广泛用于构建企业级Web应用程序。"Spring+SpringMVC+Mybatis框架项目整合"是一个典型的后端技术栈,旨在提供高效、灵活且可...

    Spring+SpringMVC+Mybatis框架整合例子——亲测可用.zip

    在SSM整合中,Spring作为整体的容器,管理SpringMVC和Mybatis中的所有组件。SpringMVC负责处理HTTP请求,Mybatis则负责数据库操作。Spring通过Bean定义来管理和装配这些组件,包括SpringMVC的Controller、Service...

    网上书城项目(采用框架Spring-SpringMVC-MyBatis).zip

    这是一个网上书城项目,采用当前最流行的框架Spring-SpringMVC-MyBatis设计,主要是对之前用Jsp/Servlet做的一些优化,重构了整个系统,感觉还不错,学到了很多新的知识,能对SSM框架熟练的运用了。 这是一个网上...

    Spring,SpringMvc,Hibernate

    标题中的"Spring,SpringMvc,Hibernate"涉及到的是Java开发中常用的三个开源框架,它们在企业级Web应用开发中起着核心作用。以下是这三个框架的详细解释: **Spring框架**是Java开发中的一个全面的轻量级容器,它...

Global site tag (gtag.js) - Google Analytics