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 }
时间: 2024-10-10 16:49:19

spring in action 学习十一:property placeholder Xml方式实现避免注入外部属性硬代码化的相关文章

spring in action 学习十二:property placeholder 注解的方式实现避免注入外部属性硬代码化

这里的注解是指@PropertySource这个注解.用@PropertySource这个注解加载.properties文件. 案例的目录结构如下: student.properties的代码如下: 1 #用配置文件的形式,避免注入属性值的硬代码化. 2 name=AbrahamLincoln 3 age=21 Student的代码如下: 1 package com.advancedWiring.ambiguityIniAutowiring2; 2 3 import org.springfram

spring in action学习笔记一:DI(Dependency Injection)依赖注入之CI(Constructor Injection)构造器注入

一:这里先说一下DI(Dependency Injection)依赖注入有种表现形式:一种是CI(Constructor Injection)构造方法注入,另一种是SI(Set Injection) set 注入.这篇随笔讲的是第一种构造方法注入(Constructor Injection). 其实DI(Dependency Injection)依赖注入你不妨反过来读:注入依赖也就是把"依赖"注入到一个对象中去.那么何为"依赖"呢?依赖就是讲一个对象初始化或者将实例

spring in action 学习笔记十三:SpEL语言(Spring Expression Language)

SpEl语言的目的之一是防止注入外部属性的代码硬代码化.如@Value("#{student.name}")这个注解的意思是把Student类的name的属性值注入进去.其中student指向Student,是Student的id. SpEl的作用是: 1.The ability to reference beans by their IDs; 2.Invoking methods and accessing propeerties on objects 3.Mathmatical,r

Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件

1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.kejian.spring.bean.autowire.Student" p:name="Tony" autowire="byName"></bean> 1.2 类型 byName 目标bean的id与属性名一置,若不匹配置为null byTy

spring in action学习笔记十五:配置DispatcherServlet和ContextLoaderListener的几种方式。

在spring in action中论述了:DispatcherServlet和ContextLoaderListener的关系,简言之就是DispatcherServlet是用于加载web层的组件的上下文.ContextLoadListener是加载 其他组件的上下文. 第一种方式:纯注解的方式: 在spring4.0版本以上,倾向用注解的方式配置DispatcherServlet和ContextLoaderListener.配置方式如下: 思路:一个类只要继承AbstractAnnotati

Spring in Action 学习笔记一

Spring 核心 ? ? ? Spring的主要特性仅仅是 依赖注入DI和面向切面编程AOP ? ? ? JavaBean 1996.12 Javav 规范针对Java定义了软件组件模型,是简单的Java对象不仅可以重用,而且可以轻松的构建更复杂的应用.没有提供诸如事务支持.安全.分布式计算等服务. ? ? ? BJB 1998.3 提供了必须的企业级服务,但是不再简单, 声明式编程简化开发 部署描述符和配套代码实现异常复杂. Java 组件开发, AOP 和DI 为POJO提供了类似EJB的

【spring in action 学习--springMVC搭建】在不使用web.xml的情况下,配置Srping MVC工程

一.Spring MVC 简介 DispatcherServlet是Spring MVC的核心,他负责将请求路由到其他的组件中. 在servlet3.0 之前,传统的搭建Spring MVC工程时,像DispatcherServlet这样Servlet都会配置在web.xml文件中. 在servlet3.0 中对功能进行了增强, 所以不需要将DispatcherServlet配置在web.xml中. 二. 相关代码 1.webconfig---> 这个文件中主要是用来几个功能:a.启用 Spri

spring in action学习笔记十六:配置数据源的几种方式

第一种方式:JNDI的方式. 用xml配置的方式的代码如下: 1 <jee:jndi-lookup jndi-name="/jdbc/spittrDS" resource-ref="true" id="dataSource"/> 用注解方式的代码如下: 1 @Bean 2 public JndiObjectFactoryBean jndiObjectFactoryBean(){ 3 JndiObjectFactoryBean jndi

Spring in Action 学习笔记二-DI

装配bean 2015年10月9日 9:49 ? ? ? ? ? ? Sprng中,对象无需自己负责查找或创建其关联的其他对象.相关,容器负责吧需要相互协作的对象引用赋予各个对象. 创建应用对象之间协作关系的行为通常被称为装配(wiring).这是依赖注入的本质. ? ? ? ? ? ? 声明bean ? ? ? 典型的xml配置文件 ? ? ? ? ? ? 屏幕剪辑的捕获时间: 2015-10-9 10:17 ? ? ? spring核心自带了10个命令空间 ? ? ? ? ? ? 屏幕剪辑的