spring mvc 里有两个配置文件,
第一个,为spring的service和dao进行配置的配置文件,对应springMVC的父context applicationContext
第二个,为spring MVC的controller进行配置的配置文件,对应springMVC里的子context webapplicationContext,该webapplicationContext继承自父context,所以可以访问父context的bean。
service 里可以直接值使用@Value("${someprop}")的方式直接拿到属性值,
对于controller来说,就没有那么简单了,不能直接使用@Value("${someprop}")注入属性值,参阅外国达人的分析
Spring @Value annotation in @Controller class not evaluating to value inside properties file
It seems that the question has been already asked Spring 3.0.5 doesn't evaluate @Value annotation from properties
The difference between web app root and servlet application contexts is one of the top sources of confusion in Spring, see difference between applicationContext and spring-servlet.xml in spring
From @Value javadoc :
Note that actual processing of the @Value annotation is performed by a BeanPostProcessor
From Spring documentation:
BeanPostProcessor interfaces are scoped per-container. This is only relevant if you are using container hierarchies. If you define a BeanPostProcessor in one container, it will only do its work on the beans in that container. Beans that are defined in one container are not post-processed by a BeanPostProcessor in another container, even if both containers are part of the same hierarchy.
就是说@Value是通过BeanPostProcessor来处理的,而webapplicationContex和applicationContext是单独处理的,不是继承的,所以webapplicationContex不能使用父容器的属性值。
要作的就是单独给webapplicationContex设置property-placeholder
这样就可以使用@Value为Controller注入属性了,还有个小前提,就是这个属性值不能是static的,static的@Value就没有效果了。
第一个,为spring的service和dao进行配置的配置文件,对应springMVC的父context applicationContext
<!--applicationContext.xml --> <context:property-placeholder ignore-unresolvable="true" location="classpath*:/application.properties" />
第二个,为spring MVC的controller进行配置的配置文件,对应springMVC里的子context webapplicationContext,该webapplicationContext继承自父context,所以可以访问父context的bean。
<!--spring-mvc.xml --> <!-- 自动扫描且只扫描@Controller --> <context:component-scan base-package="com.xxxx.web" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>
service 里可以直接值使用@Value("${someprop}")的方式直接拿到属性值,
对于controller来说,就没有那么简单了,不能直接使用@Value("${someprop}")注入属性值,参阅外国达人的分析
Spring @Value annotation in @Controller class not evaluating to value inside properties file
引用
It seems that the question has been already asked Spring 3.0.5 doesn't evaluate @Value annotation from properties
The difference between web app root and servlet application contexts is one of the top sources of confusion in Spring, see difference between applicationContext and spring-servlet.xml in spring
From @Value javadoc :
Note that actual processing of the @Value annotation is performed by a BeanPostProcessor
From Spring documentation:
BeanPostProcessor interfaces are scoped per-container. This is only relevant if you are using container hierarchies. If you define a BeanPostProcessor in one container, it will only do its work on the beans in that container. Beans that are defined in one container are not post-processed by a BeanPostProcessor in another container, even if both containers are part of the same hierarchy.
就是说@Value是通过BeanPostProcessor来处理的,而webapplicationContex和applicationContext是单独处理的,不是继承的,所以webapplicationContex不能使用父容器的属性值。
要作的就是单独给webapplicationContex设置property-placeholder
<!--spring-mvc.xml --> <!-- 自动扫描且只扫描@Controller --> <context:component-scan base-package="com.xxxx.web" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan> <!-- 单独为webapplicationContext注入placeholder --> <context:property-placeholder ignore-unresolvable="true" location="classpath*:/application.properties" />
这样就可以使用@Value为Controller注入属性了,还有个小前提,就是这个属性值不能是static的,static的@Value就没有效果了。
发表评论
-
charles4.2下载与破解方法以及配置https
2020-02-26 09:03 2有两个抓包工具 一个是fidder,一个是charles,两个 ... -
序列号批量生成算法
2019-12-05 14:11 0业务处理过程当中,经常需要生成订单号、序列号等,简单的可 ... -
使用ANTLR处理文本
2019-08-28 17:32 773引用 使用 Antlr 处理文本 https://www.ib ... -
解决maven-metadata.xml文件下载卡死问题
2019-04-11 14:02 4008http://192.168.1.110:8081/nexus ... -
rsync备份和删除指定文件
2018-01-02 10:23 2062文件异地备份时,需要将本地文件合并到服务器上,且不能删除服务器 ... -
javaLocale格式化日期和数字
2017-08-25 09:26 878public static void main(Strin ... -
centos6 tomcat 启动脚本 tomcat服务
2017-08-23 11:24 1445系统自动启动tomcat 复制该脚本到/etc/init.d/ ... -
win7 命令行改IP和DNS
2016-12-21 18:35 746使用管理员权限运行CMD //改DNS netsh ... -
jenkins中集成sonar,使用findbug、pmd、checkstyle提升代码质量
2016-09-29 14:58 6187实际上jenkins单独也 ... -
jenkins 集成sonar
2016-09-18 10:14 0jenkins集成sonar可以从插件中心直接更新安装 son ... -
activeMQ5.14权限配置
2016-08-17 13:47 2677activeMQ默认的消息队列没有用户名和密码,可以直接通过T ... -
solaris 使用解压版的jdk
2016-07-27 15:17 770solaris上配置jdk其实也很简单 由于solaris有 ... -
solaris tomcat开机启动
2016-07-27 16:17 625创建文件夹/var/svc/manifes ... -
HibernateTemplate Vs HibernateDaoSupport Vs Direct Hibernate Access
2016-07-26 11:07 737http://forum.spring.io/forum/sp ... -
spring mvc mybatis will not be managed by Spring
2016-07-20 17:30 9896项目运行时发现事务提交不完整,回滚时只能回滚一半。 系统配置 ... -
java里判断一点是否在某个区域
2016-06-03 17:47 1859import java.awt.geom.Path2D ... -
12306的技术升级
2016-04-20 16:17 1040升级的核心是余票查询的升级,余票查询使用存储过程,sybase ... -
工作流的123
2016-04-20 12:58 579三分钟了解Activity工作流 工作流一般会给开发人员提供流 ... -
googleapis.com域名访问慢的解决办法
2016-04-13 12:09 9851、安装火狐 2、安装插件ReplaceGoogleCDN -
ehcache-web缓存的使用和清除
2016-03-15 11:37 10528引入jar包 <!--ehcache缓存--> ...
相关推荐
在Java开发中,特别是在使用Spring Boot构建Web应用时,我们经常遇到需要处理多态对象的情况。多态性是面向对象编程的重要特性,它允许我们设计更灵活、可扩展的代码。`@TypeDiscriminator` 和 `@JsonTypeInfo` 这两...
在Spring MVC框架中,注解的使用极大地简化了配置,提高了开发效率。Spring MVC通过注解可以实现控制器、方法映射、模型数据绑定、视图解析等关键功能。本实例将深入探讨Spring MVC中常见的注解及其应用。 1. `@...
《Spring MVC之@RequestMapping详解》 在Java Web开发中,Spring MVC框架因其强大的功能和灵活性而备受青睐。在处理HTTP请求时,@RequestMapping注解扮演着至关重要的角色,它负责将客户端的请求映射到控制器中的...
另外,Spring MVC还提供了许多其他注解,如`@RequestParam`用于从请求参数中获取值,`@ModelAttribute`用于绑定表单数据到模型对象,`@ResponseBody`用于直接将方法返回值转换为HTTP响应体等。 学习Spring时,了解...
Spring 容器管理的 Bean,所以在这里 @Controller 注解起到了标识该类为 Spring MVC 控制器的作用。同时,它还暗示了该 Bean 的作用域,通常默认为 Singleton(单例)。而 @RequestMapping 注解则用来定义请求映射,...
1. **注解驱动的Controller**:在Spring 2.5中,你可以使用`@Controller`注解来标记一个类作为Spring MVC的控制器。这个注解告诉Spring该类包含处理HTTP请求的方法。例如: ```java @Controller public class ...
在本节中,我们主要介绍几个Spring中常用的注解,它们分别是@Component、@Controller、@Service和@Repository,这些注解用于将Java类声明为Spring管理的Bean。 #### 2. @Component注解 @Component是一个通用的构...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的模型-视图-控制器(MVC)架构支持。这个“spring mvc demo加用户模块的”项目应该是一个包含用户管理功能的Spring MVC示例,...
Spring MVC的@RequestMapping注解是核心的控制器层注解,它用于映射HTTP请求到特定的处理方法。在本文中,我们将深入探讨这个注解的各个方面,包括它的使用场景、属性以及如何结合其他注解实现更复杂的请求处理。 ...
Spring MVC 是一个基于 Spring 框架的轻量级 Web 开发组件,它为开发者提供了构建 Web 应用程序的强大工具。在 Spring MVC 中,Controller 是处理用户请求的核心组件,负责接收请求、处理业务逻辑并返回响应。本文将...
使用`@Autowired`注解可以将Spring管理的`SessionFactory`注入到控制器或服务类中: ```java @Autowired private SessionFactory sessionFactory; public void saveUser(User user) { Session session = ...
本demo展示了如何使用注解驱动的方式来构建一个简单的Spring MVC应用程序。注解使得代码更加简洁,减少了XML配置文件的工作量,提高了开发效率。 首先,我们需要了解Spring MVC的核心概念: 1. **...
在Spring MVC 3中,我们可以使用`@Controller`注解来标记一个类作为控制器。这个注解表明该类将处理来自客户端的HTTP请求。例如: ```java @Controller public class MyController { // ... } ``` 2. **处理...
1. **@Autowired**:这是 Spring 自动装配依赖注入的注解,用于将依赖的服务(如 BbtForumService)自动注入到 Controller 类的成员变量中。这样就避免了在 XML 配置文件中手动配置 Bean 的依赖关系。 2. **@...
6. **控制层(Controller)**:创建UserController类,使用@RestController或@Controller注解标识为SpringMVC的控制器。在其中定义处理HTTP请求的方法,使用@RequestMapping、@RequestParam、@PathVariable等注解来...
在基于注解的 Spring 3.0.x MVC 中,使用 @Controller 注解来标注控制器 Bean,@RequestMapping 注解来标注请求映射关系,@Service 注解来标注服务 Bean,@Repository 注解来标注数据访问对象等。这种方式可以简化 ...
2. `<context:component-scan>`:通过使用 `component-scan` 注解,Spring 会自动扫描指定包及其子包下的所有类,寻找带有特定注解(如 `@Controller`, `@Service`, `@Repository`, `@Component`)的类并将其注册为 ...
非注解测试在Spring MVC中是指不依赖于Java注解如`@Test`,`@Controller`等进行的测试,而是通过XML配置文件来定义组件和它们之间的关系。这种方式虽然比注解方式繁琐,但有助于理解Spring MVC的工作原理。 首先,...
Struts2主要用于处理MVC(Model-View-Controller)架构中的控制器部分,而Spring则是一个全面的后端解决方案,包括依赖注入、事务管理、AOP(面向切面编程)等功能。本篇文章将详细介绍如何在Struts2和Spring框架中...
Spring MVC通过`@Autowired`注解自动注入JdbcTemplate实例。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org....