<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="duke" class="com.springinaction.springidol.Juggler" >
<!-- 通过构造方法设置属性值 -->
<constructor-arg value="15"></constructor-arg>
</bean> <bean id="sonnect29" class="com.springinaction.springidol.Sonnet29"></bean> <bean id="poeticPoem" class="com.springinaction.springidol.PoeticJuggler">
<constructor-arg value="15"></constructor-arg>
<constructor-arg ref="sonnect29"></constructor-arg>
</bean> <!-- 建立一个Instrumentalist bean
@通过property为bean设置属性值,一旦instrumentalist被实例化,则对象会被赋此值
-->
<bean id="Kenny" class="com.springinaction.springidol.Instrumentalist">
<property name="song" value="Jingle Bells"></property>
<property name="age" value="37"></property> <!-- 这种做法可以实现接口与类的松耦合,比如下面两个都实现了Instrument接口的乐器类,Kenny bean可以随意引用 -->
<!--
<property name="instrument" ref="saxphone"></property>
<property name="instrument" ref="piano"></property>
-->
<!-- 内部bean的使用方式,这里用在property,constructor里面也是一样用 -->
<property name="instrument">
<bean class="com.springinaction.springidol.piano"></bean>
</property>
</bean> <bean id="saxphone" class="com.springinaction.springidol.saxphone"></bean>
<bean id="piano" class="com.springinaction.springidol.piano"></bean> <!-- p命名空间用法 -->
<bean id="Kenny2" class="com.springinaction.springidol.Instrumentalist"
p:song="Lemon Tree" p:age="30" p:instrument-ref="saxphone" >
</bean> <!-- 为集合配置bean -->
<bean id="hank" class="com.springinaction.springidol.OneManBand">
<property name="instruments">
<list>
<ref bean="piano" />
<ref bean="saxphone" />
</list>
</property>
<property name="instruments2">
<map>
<entry key="piano" value-ref="piano"></entry>
<entry key="saxphone" value-ref="saxphone"></entry>
</map>
</property>
</bean> <!-- properties的写法 -->
<bean id="hank2" class="com.springinaction.springidol.OneManBand">
<property name="instruments">
<props>
<!-- key和value都为String -->
<prop key="piano">la la la</prop>
<prop key="saxphone">ta ta ta</prop>
</props>
</property>
</bean> <!-- 赋null值 -->
<!--
...
<property name="xxx"><null/></property>
...
-->
</beans>
package com.springinaction.springidol;

/**
*
* @author Alan.chen
* @定义表演者
* @类型:接口
*/ public interface Proformer {
void perform() throws Exception;
}
package com.springinaction.springidol;

public interface Instrument {
public void play();
}
package com.springinaction.springidol;

public class saxphone implements Instrument {

    public saxphone() {
} @Override
public void play() {
System.out.println("toot toot toot");
} }
package com.springinaction.springidol;

public class piano implements Instrument {

    public piano(){

    }

    @Override
public void play() {
System.out.println("弹得一手好琴。。。");
} }
package com.springinaction.springidol;

/**
*
* @author Alan.chen
* @诗人实现类
*/
public class Sonnet29 implements Poem { private static String[] LINES = {
"When in disgrace with fortune and men's eyes,",
"I all alone beweep my outcast state,",
"And trouble deaf heaven with my bootless cries,",
"And look upon myself, and curse my fate,",
"Wishing me like to one more rich in hope,",
"Featured like him, like him with friends posses'd,",
"Desiring this man's art, and that man's scope,",
"With what I most enjoy contented least;",
"Yet in these thoughts myself almost despising,",
"Haply I think on thee,-and then my state",
"(Like to the lark at break of day arising From sullen earth) sings hymns at heaven's gate;",
"For thy sweet love remember'd , such wealth brings,",
"That then I scorn to change my state with kings.!"
}; Sonnet29(){ } @Override
public void recite() {
for(int i=0;i<LINES.length;i++)
System.out.println(LINES[i]);
} }
package com.springinaction.springidol;

/**
*
* @author Alan.chen
* @注入Bean属性示例,用setXXX(),getXXX()接收
* @描述:Instrumentalist,演奏家
*/
public class Instrumentalist implements Proformer { public Instrumentalist() {
} private int age; public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public void perform() throws Exception {
System.out.println("playing "+song+" : ");
instrument.play();
} private String song;
public void setSong(String song){
this.song = song;
} public String getSong(){
return song;
} public String screamSong(){
return song;
} private Instrument instrument;
public void setInstrument(Instrument instrument){
this.instrument = instrument;
} }
package com.springinaction.springidol;

import java.util.Collection;
import java.util.Map; public class OneManBand implements Proformer { public OneManBand() {
} @Override
public void perform() throws Exception {
for(Instrument instrument:instruments)
instrument.play();
for(String key:instruments2.keySet()){
System.out.println(key + " : ");
Instrument instrument = instruments2.get(key);
instrument.play();
}
} //当被注入的对象时集合时
private Collection<Instrument> instruments; public Collection<Instrument> getInstruments() {
return instruments;
} public void setInstruments(Collection<Instrument> instruments) {
this.instruments = instruments;
} //当被注入的对象是map时
private Map<String,Instrument> instruments2; public Map<String, Instrument> getInstruments2() {
return instruments2;
} public void setInstruments2(Map<String, Instrument> instruments2) {
this.instruments2 = instruments2;
} //当被注入的map的key和value都是String时,可以用properties来代替map
//private Properties instruments3;
// public void setInstruments3(Properties instruments2) {
// this.instruments2 = instruments3;
// } }
package com.springinaction.springidol;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"com/springinaction/springidol/spring-idol.xml");
// Proformer performer = (Proformer)ctx.getBean("duke");
// Proformer performer = (Proformer)ctx.getBean("poeticPoem");
// Proformer performer = (Proformer)ctx.getBean("Kenny2");
Proformer performer = (Proformer)ctx.getBean("hank");
try {
performer.perform();
} catch (Exception e) {
e.printStackTrace();
}
}
}

一个完成的spring xml配置文件的更多相关文章

  1. spring*.xml配置文件明文加密

    spring*.xml配置文件明文加密 说明:客户要求spring*.xml中Oracle/Redis/MongoDB的IP.端口.用户名.密码不能明文存放,接到需求的我,很无奈,但是还是的硬着头皮搞 ...

  2. Eclipse创建Spring XML配置文件插件

    引用:https://www.cnblogs.com/lideqiang/p/9067219.html 第一步:在 Eclipse Marketplace仓库中,搜索sts 第二步:安装Spring ...

  3. Spring XML配置文件无法自动提示 eclipse中XML配置文件open with打开方式选择 XML Editor:注意它的编辑方式也是有两种的design和source

    双击XML配置文件,如果打开方式不正确 则如下图: 都是灰色显示,不会有自动提示,也不会有颜色标注 右击XML配置文件,选择打开方式为XML Editor,则会有颜色标注 如果此时没有自动提示 则要手 ...

  4. Spring XML配置文件示例(二)——web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" ...

  5. 03SpringMvc_自定义的spring.xml配置文件和逻辑视图名

    这篇文章的目的是实现Struts2中一种形式(封装视图的逻辑名称),在Struts2中Action处理后会返回"SUCCESS"这样,然后根据"SUCCESS" ...

  6. spring xml 配置文件中标签的解析

    一个springmvc配置文件的例子为: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...

  7. spring框架-spring.xml配置文件

    运行的时候会报错的,因为写到<bean>标签里面去了,肯定会报错的,要记得把注释删掉,就不会报错了,这样写注释是为了方便下次自己看. <?xml version="1.0& ...

  8. 4.Spring——xml配置文件

    如果使用Maven构建项目,spring在加载xsd文件时总是先试图在本地查找xsd文件(spring的jar包中已经包含了所有版本的xsd文件), 如果没有找到,才会转向去URL指定的路径下载.ap ...

  9. [spring]xml配置文件中的"classpath:"与"classpath*:"的区别

    <bean id="sessionFactorySaas" class="org.mybatis.spring.SqlSessionFactoryBean" ...

随机推荐

  1. Hibernate5笔记4--单表查询

    单表查询:   Hibernate是DAO层技术,对数据的使用,查询是最为重要的.Hibernate的查询技术非常强大,支持原始SQL语句查询,支持QBC查询及Hibernate特有的HQL查询. H ...

  2. 查看Oracle数据库中的所有用户名

    select username from dba_users"

  3. Oracle和MySQL的高可用方案对比【转】

    关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...

  4. structc 开源框架介绍

    引言 - 一切才刚刚开始 structc 是 C 结构基础库. 简单可复用. structc - https://github.com/wangzhione/structc 之前也描述过几次 stru ...

  5. Awk基础

    Awk文本处理 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.awk数据可以来自标准输入.一个或多个文件,或其它命令的输出.awk通常是配合脚本进行使用, 是一个强大的文本处 ...

  6. WPF Devexpress GridControl Value与Display转换

    直入主题吧!开发中往往需要将代码转换成中文显示在表格中. 如下图 下面就直接贴代码了. C#代码 using System; using System.Collections.Generic; usi ...

  7. P2733 家的范围 Home on the Range

    又是一校内模拟赛见的题 不知道为什么出题人怎么这么喜欢USACO的Farmer John的他的牛... 感觉这道题不是特别的难,但也不很水 同机房的神仙们都说这个题是一道二维前缀和的裸题,但我当时的确 ...

  8. Linux下的IPC机制

    Linux下的IPC机制 IPC(Inter-Process Communication)是多个进程之间相互沟通的一种方法.在linux下有多种进程间通信的方法. 共享内存 Linux内存共享有多种, ...

  9. Linux基础入门学习笔记之三

    第四节 Linux目录结构及文件基本操作 Linux目录结构 Linux 的目录与 Windows 的目录的区别 目录与存储介质(磁盘,内存,DVD 等)的关系 Windows 一直是==以存储介质为 ...

  10. Python全栈开发之15、DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...