`

sping mvc 使用@Value注解为controller注入值

    博客分类:
  • java
 
阅读更多
spring mvc 里有两个配置文件,
第一个,为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就没有效果了。

分享到:
评论

相关推荐

    @TypeDiscriminator注解实现多态对象的查询,jackson @JsonTypeInfo注解实现controller多态支持

    在Java开发中,特别是在使用Spring Boot构建Web应用时,我们经常遇到需要处理多态对象的情况。多态性是面向对象编程的重要特性,它允许我们设计更灵活、可扩展的代码。`@TypeDiscriminator` 和 `@JsonTypeInfo` 这两...

    Spring MVC 的注解使用实例

    在Spring MVC框架中,注解的使用极大地简化了配置,提高了开发效率。Spring MVC通过注解可以实现控制器、方法映射、模型数据绑定、视图解析等关键功能。本实例将深入探讨Spring MVC中常见的注解及其应用。 1. `@...

    Spring MVC之@RequestMapping详解

    《Spring MVC之@RequestMapping详解》 在Java Web开发中,Spring MVC框架因其强大的功能和灵活性而备受青睐。在处理HTTP请求时,@RequestMapping注解扮演着至关重要的角色,它负责将客户端的请求映射到控制器中的...

    学习Spring MVC,关于注解的Spring MVC,简单例子,关于控制器的Spring MVC,学习Spring,简单Spring MVC实例

    另外,Spring MVC还提供了许多其他注解,如`@RequestParam`用于从请求参数中获取值,`@ModelAttribute`用于绑定表单数据到模型对象,`@ResponseBody`用于直接将方法返回值转换为HTTP响应体等。 学习Spring时,了解...

    基于注解驱动的 Spring MVC

    Spring 容器管理的 Bean,所以在这里 @Controller 注解起到了标识该类为 Spring MVC 控制器的作用。同时,它还暗示了该 Bean 的作用域,通常默认为 Singleton(单例)。而 @RequestMapping 注解则用来定义请求映射,...

    使用 Spring 2_5 基于注解驱动的 Spring MVC

    1. **注解驱动的Controller**:在Spring 2.5中,你可以使用`@Controller`注解来标记一个类作为Spring MVC的控制器。这个注解告诉Spring该类包含处理HTTP请求的方法。例如: ```java @Controller public class ...

    spring注解笔记

    在本节中,我们主要介绍几个Spring中常用的注解,它们分别是@Component、@Controller、@Service和@Repository,这些注解用于将Java类声明为Spring管理的Bean。 #### 2. @Component注解 @Component是一个通用的构...

    spring mvc demo加用户模块的

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的模型-视图-控制器(MVC)架构支持。这个“spring mvc demo加用户模块的”项目应该是一个包含用户管理功能的Spring MVC示例,...

    Spring MVC之@RequestMapping注解详解

    Spring MVC的@RequestMapping注解是核心的控制器层注解,它用于映射HTTP请求到特定的处理方法。在本文中,我们将深入探讨这个注解的各个方面,包括它的使用场景、属性以及如何结合其他注解实现更复杂的请求处理。 ...

    Spring MVC Controller配置方式

    Spring MVC 是一个基于 Spring 框架的轻量级 Web 开发组件,它为开发者提供了构建 Web 应用程序的强大工具。在 Spring MVC 中,Controller 是处理用户请求的核心组件,负责接收请求、处理业务逻辑并返回响应。本文将...

    spring mvc 注解 增删改 实例

    使用`@Autowired`注解可以将Spring管理的`SessionFactory`注入到控制器或服务类中: ```java @Autowired private SessionFactory sessionFactory; public void saveUser(User user) { Session session = ...

    基于注解的Spring MVC小demo

    本demo展示了如何使用注解驱动的方式来构建一个简单的Spring MVC应用程序。注解使得代码更加简洁,减少了XML配置文件的工作量,提高了开发效率。 首先,我们需要了解Spring MVC的核心概念: 1. **...

    spring mvc 3_demo

    在Spring MVC 3中,我们可以使用`@Controller`注解来标记一个类作为控制器。这个注解表明该类将处理来自客户端的HTTP请求。例如: ```java @Controller public class MyController { // ... } ``` 2. **处理...

    Spring 2.5 基于注解驱动的 Spring MVC.docx

    1. **@Autowired**:这是 Spring 自动装配依赖注入的注解,用于将依赖的服务(如 BbtForumService)自动注入到 Controller 类的成员变量中。这样就避免了在 XML 配置文件中手动配置 Bean 的依赖关系。 2. **@...

    使用SpringMVC +注解 制作的增删改查,大量的注释,让你更容易理解代码

    6. **控制层(Controller)**:创建UserController类,使用@RestController或@Controller注解标识为SpringMVC的控制器。在其中定义处理HTTP请求的方法,使用@RequestMapping、@RequestParam、@PathVariable等注解来...

    基于注解的Spring_3.0.x_MVC

    在基于注解的 Spring 3.0.x MVC 中,使用 @Controller 注解来标注控制器 Bean,@RequestMapping 注解来标注请求映射关系,@Service 注解来标注服务 Bean,@Repository 注解来标注数据访问对象等。这种方式可以简化 ...

    spring mvc注解实例

    2. `&lt;context:component-scan&gt;`:通过使用 `component-scan` 注解,Spring 会自动扫描指定包及其子包下的所有类,寻找带有特定注解(如 `@Controller`, `@Service`, `@Repository`, `@Component`)的类并将其注册为 ...

    Spring MVC非注解测试

    非注解测试在Spring MVC中是指不依赖于Java注解如`@Test`,`@Controller`等进行的测试,而是通过XML配置文件来定义组件和它们之间的关系。这种方式虽然比注解方式繁琐,但有助于理解Spring MVC的工作原理。 首先,...

    Struts2+spring注解配置简介

    Struts2主要用于处理MVC(Model-View-Controller)架构中的控制器部分,而Spring则是一个全面的后端解决方案,包括依赖注入、事务管理、AOP(面向切面编程)等功能。本篇文章将详细介绍如何在Struts2和Spring框架中...

    spring mvc注解jdbctemplate

    Spring MVC通过`@Autowired`注解自动注入JdbcTemplate实例。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org....

Global site tag (gtag.js) - Google Analytics