spring in action 学习十一:property placeholder Xml方式实现避免注入外部属性硬代码化
Posted 技术让世界更精彩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring in action 学习十一:property placeholder Xml方式实现避免注入外部属性硬代码化相关的知识,希望对你有一定的参考价值。
这里用到了placeholder特有的一个语言或者将表达形式:${},spring in action 描述如下:
In spring wiring ,placeholder values are property names wrapped with ${...},as an exampl,you can resolve the constructor arguments for a BlankDisc in xml like this :
<bean id="sgtPeppers"
class="soundsystem.BlankDisc"
c:_titile="${disc.title}"
c:_artist="${disc.artist}"/>
下面这个案例用${...}从配置文件读取内容,
记得一定要在配置文件写上下面的语句:
1 <!-- 加载.properties文件--> 2 <context:property-placeholder location="classpath:com/advancedWiring/ambiguityIniAutowiring2/student.properties"/>
案例的目录结构如下图所示:
案例的代码如下:
Student类的代码如下:
1 package com.advancedWiring.ambiguityIniAutowiring2; 2 3 import org.springframework.beans.factory.BeanNameAware; 4 import org.springframework.beans.factory.config.ConfigurableBeanFactory; 5 import org.springframework.context.annotation.Scope; 6 import org.springframework.context.annotation.ScopedProxyMode; 7 import org.springframework.stereotype.Component; 8 import org.springframework.web.context.WebApplicationContext; 9 10 /** 11 * Created by ${秦林森} on 2017/6/9. 12 */ 13 public class Student implements BeanNameAware{ 14 private String name; 15 private Integer age; 16 17 public String getName() { 18 return name; 19 } 20 21 public void setName(String name) { 22 this.name = name; 23 } 24 25 public Integer getAge() { 26 return age; 27 } 28 29 public void setAge(Integer age) { 30 this.age = age; 31 } 32 33 @Override 34 public void setBeanName(String name) { 35 System.out.println("the Student bean name is :"+name); 36 } 37 38 /** 39 * write this constructor mainly to inject external property value. 40 * @param name the student\'s name 41 * @param age the student\'s age 42 */ 43 public Student(String name, Integer age) { 44 this.name = name; 45 this.age = age; 46 } 47 }
student.properties文件的代码如下:
1 #用配置文件的形式,避免注入属性值的硬代码化。 2 name=AbrahamLincoln 3 age=21
ambiguity.xml的代码如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:c="http://www.springframework.org/schema/c" 6 xmlns:context="http://www.springframework.org/schema/context" 7 xsi:schemaLocation="http://www.springframework.org/schema/aop 8 http://www.springframework.org/schema/aop/spring-aop.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/beans 12 http://www.springframework.org/schema/beans/spring-beans.xsd"> 13 <context:annotation-config/> 14 <!-- 加载.properties文件--> 15 <context:property-placeholder location="classpath:com/advancedWiring/ambiguityIniAutowiring2/student.properties"/> 16 <bean id="student" 17 class="com.advancedWiring.ambiguityIniAutowiring2.Student" 18 c:name="${name}" 19 c:age="${age}"> 20 </bean> 21 </beans>
测试类Test的代码如下:
1 package com.advancedWiring.ambiguityIniAutowiring2; 2 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 /** 7 * Created by ${秦林森} on 2017/6/9. 8 */ 9 public class Test { 10 public static void main(String[] args) { 11 12 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("com/advancedWiring/ambiguityIniAutowiring2/ambiguity.xml"); 13 Student student = ac.getBean(Student.class); 14 /** 15 * 输出结果是:the student name is: AbrahamLincoln and age is :19 16 * 可以看出他把配置文件的值给取出来了。 17 */ 18 System.out.println("the student name is: "+student.getName()+" and age is :"+student.getAge()); 19 } 20 }
以上是关于spring in action 学习十一:property placeholder Xml方式实现避免注入外部属性硬代码化的主要内容,如果未能解决你的问题,请参考以下文章
Spring aop学习整理(spring in action):spring AOP
spring in action 学习笔记十三:SpEL语言(Spring Expression Language)
spring in action学习笔记七:@Conditional注解的用法