`
kavy
  • 浏览: 888415 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring3中使用@value注解获取属性值

 
阅读更多

 

  在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件中的文件,进行键值对的注入,例子如下:

1.首先在applicationContext.xml中加入: 
Xml代码  收藏代码
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.         xsi:schemaLocation="http://www.springframework.org/schema/beans   
  4.          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
 的命名空间,然后
2.
Xml代码  收藏代码
  1. <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
  2.     <property name="locations">    
  3.         <list>    
  4.             <value>classpath:test.properties</value>    
  5.         </list>                
  6.     </property>                                
  7. </bean>  

3.创建test.properties 
   abc=123 

4.
Java代码  收藏代码
  1. import org.springframework.beans.factory.annotation.Value;     
  2. import org.springframework.stereotype.Controller;     
  3. import org.springframework.web.bind.annotation.RequestMapping;     
  4.     
  5. @RequestMapping("/admin/images")     
  6. @Controller     
  7. public class ImageAdminController {     
  8.     
  9.     private String imageDir;     
  10.       
  11.     @Value("${abc}")   
  12.     public void setImageDir(String val) {     
  13.         this.imageDir = val;     
  14.     }  
  15. }  
        这样就将test.abc的值注入了imageDir中了。
 
 

有时候需要从properties文件中加载配置,以前的方式是这样的:

 

	<bean id="jdbcProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath*:/spring/jdbc.properties</value>
			</list>
		</property>
	</bean>

最近发现这样也可以,代码更整洁:

 

	<context:property-placeholder location="classpath:spring/jdbc.properties" />

在bean定义中依然可以通过“${}”这种方式来去值:

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="initialSize" value="${jdbc.initialSize}" />
		<property name="maxActive" value="${jdbc.maxActive}" />
		<property name="maxIdle" value="${jdbc.maxIdle}" />
		<property name="minIdle" value="${jdbc.minIdle}" />
	</bean>


<context:property-placeholder ... /> is the XML equivalent to the PropertyPlaceholderConfigurer. So, prefer that. The <util:properties/> simply factories a java.util.Properties instance that you can inject.

In Spring 3.1 (not 3.0...) you can do something like this:

@Configuration
@PropertySource("/foo/bar/services.properties")
public class ServiceConfiguration { 

    @Autowired Environment environment; 

    @Bean public javax.sql.DataSource dataSource( ){ 
        String user = this.environment.getProperty("ds.user");
        ...
    } 
}

In Spring 3.0, you can "access" properties defined using the PropertyPlaceHolderConfigurer mechanism using the SpEl annotations:

@Value("${ds.user}") private String user;

If you want to remove the XML all together, simply register the PropertyPlaceholderConfigurer manually using Java configuration. I prefer the 3.1 approach. But, if youre using the Spring 3.0 approach (since 3.1's not GA yet...), you can now define the above XML like this:

@Configuration 
public class MySpring3Configuration {     
        @Bean 
        public static PropertyPlaceholderConfigurer configurer() { 
             PropertyPlaceholderConfigurer ppc = ...
             ppc.setLocations(...);
             return ppc; 
        } 

        @Bean 
        public class DataSource dataSource(
                @Value("${ds.user}") String user, 
                @Value("${ds.pw}") String pw, 
                ...) { 
            DataSource ds = ...
            ds.setUser(user);
            ds.setPassword(pw);                        
            ...
            return ds;
        }
}

Note that the PPC is defined using a static bean definition method. This is required to make sure the bean is registered early, because the PPC is a BeanFactoryPostProcessor - it can influence the registration of the beans themselves in the context, so it necessarily has to be registered before everything else.

 

 

 


分享到:
评论

相关推荐

    基于Spring boot @Value 注解注入属性值的操作方法

    在Bean中使用`@Value`注解可以直接获取这些属性值: ```java @RestController public class ValueController { @Value("${user.name}") private String name; @Value("${user.password}") private String ...

    static静态变量使用@Value注入方式.md

    通过上述分析和示例,我们可以看到,在Spring框架中,虽然不能直接使用`@Value`注解为静态变量注入值,但可以通过定义一个非静态方法并使用`@Value`注解来间接实现这一目标。这种方法不仅避免了潜在的警告和错误,还...

    Spring Boot技术知识点:如何理解@Value注解

    在Spring Boot框架中,`@Value`注解是Spring的核心组件之一,用于注入配置属性值到Bean中。这个注解提供了灵活的方式,让我们能够从不同的来源(如.properties或.yml文件,环境变量,命令行参数等)获取并注入值。...

    spring-demo13-注解-@Value.zip

    在Spring框架中,`@Value`注解是一个非常实用的工具,它允许我们在bean的属性或者方法参数中直接注入配置属性值,极大地提高了代码的可读性和灵活性。本项目"spring-demo13-注解-@Value.zip"显然是一个关于如何使用`...

    Springboot中@Value的使用详解

    在Springboot中,@Value注解广泛应用于将配置文件中的属性注入到Controller、Service、Configuration、Component等Spring托管的类中。下面是@Value注解的详细使用介绍: 1. 普通字符串注入 在配置文件中,我们可以...

    Spring @Value注解失效问题解决方案

    在Spring框架中,@Value注解是一个非常重要的注解,它可以将属性文件中的值注入到Spring Bean中,使得配置更加灵活和灵活。但是,在实际开发中,我们经常会遇到@Value注解失效的问题。这篇文章将会详细介绍Spring @...

    Spring @value和@PropertySource注解使用方法解析

    同时,我们也可以使用 @Value 注解从配置文件中读取数据,例如从 cat.properties 文件中读取 parent 属性的值。 @PropertySource 注解是 Spring 框架中用于引入单个配置文件的注解。例如,在上面的示例代码中,我们...

    java中的@Value获取不到配置文件的值,也加载不到默认值

    实际上就是对类上的value后面的属性值进行解析,然后拿到解析的数据和配置文件中的数据进行对比。如果对比成功,那么则通过反射,把相关的属性进行赋值。而配置文件的数据我们在上面加载environment文件的时候,已经...

    Spring Boot使用Value注解给静态变量赋值的方法

    然后,我们可以使用 @Value 注解来注入配置文件中的值,但是我们不能直接将值注入到静态变量中,而是需要使用非静态的 set 方法来注入。 例如,在下面的代码中,我们使用 @Value 注解来注入 oss.endpoint 和 oss....

    Spring中利用配置文件和@value注入属性值代码详解

    在Spring中,我们可以使用@Value注解来注入简单的属性值。例如,我们可以使用@Value注解来注入字符串、整数、布尔值等类型的属性值。 例如,在下面的代码中,我们使用@Value注解来注入三个简单的属性值:name、num...

    spring中@value注解需要注意的问题

    在实际开发中,确保正确配置`@Value`注解非常重要,因为这直接影响到应用程序能否正常读取和使用配置文件中的属性值。同时,要注意`@Value`注解不仅可以注入字符串,还可以注入基本类型和复杂类型的值,例如整数、...

    示例代码-SpringBoot踩坑记录:玩转@Value注解-自定义PropertySourcesPlaceHolderConfigurer.zip

    在Spring Boot应用中,`@Value`注解是开发者经常使用的工具,用于注入配置属性值。这个注解可以从`application.properties`或`application.yml`等配置文件中读取值,并将其注入到字段、方法参数或者构造函数参数中。...

    详解Spring通过@Value注解注入属性的几种方式

    在Spring框架中,`@Value`注解是一个非常实用的工具,它允许我们在不编写复杂的配置文件的情况下,直接在Java类中注入属性值。本文将详细介绍通过`@Value`注解注入属性的几种常见方式。 ### 1. 基于属性文件注入 #...

    Spring EL表示式的运用@Value说明

    这样,我们就可以在配置文件中定义各种属性,然后使用 `${ 属性名 }` 的方式来获取这些属性的值。 Spring EL 表达式语言是一种功能强大且灵活的语言,它可以帮助我们快速实现资源的注入,从而提高开发效率和代码的...

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

    在springboot中使用注解将值注入参数的操作

    Spring Boot 中使用注解将值注入参数的操作 Spring Boot 框架提供了强大的注解机制,允许开发者使用注解将值注入参数,从而简化代码编写和维护。本文将介绍如何在 Spring Boot 中使用注解将值注入参数,主要涵盖了...

    spring注解 -----最简单的注解与自动装配例子

    除了@Autowired,Spring还提供了@Value注解,它能注入基本类型的值或者从配置文件中读取的属性值。例如: ```java @Configuration public class AppConfig { @Value("${database.url}") private String dbUrl; } ...

    spring 注解注意事项、值的接受传递不同方式

    例如,`@Value("${property.name}")`可以获取配置文件中对应的属性值。 接下来,我们讨论一些使用注解时的注意事项: 1. 避免循环依赖:在设计bean时,要注意避免循环依赖,因为Spring默认的单例模式下,循环依赖...

    属性赋值@Value1

    在Java Spring框架中,`@Value`注解是用于注入属性值的一个重要工具,它可以从配置文件、表达式语言(SpEL)或者属性源中获取值,并将其赋值给bean的字段、方法或方法/构造函数参数。这个注解使得程序更加灵活,不...

    在自定义spring aop中使用el获取拦截方法的变量值。

    标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...

Global site tag (gtag.js) - Google Analytics