您的位置:首页 > 编程语言 > Java开发

SSM框架笔记06:初探Spring——采用XML配置方式

2018-02-20 20:01 736 查看
初探Spring——采用XML配置方式
Spring框架是一个轻量级的企业级开发的一站式解决方案。所谓解决方案就是可以基于Spring解决Java EE开发的所有问题。Spring框架主要提供了IoC容器、AOP、数据访问、Web开发、消息、测试等相关技术的支持。
Spring使用简单的POJO(Plain-Old Java Object,即无任何限制的普通Java对象)来进行企业级开发。每一个被Spring管理的Java对象都称之为Bean,而Spring提供了一个IoC容器来初始化对象,解决对象间的依赖和对象的使用。
IOC容器~DI(依赖注入)
我们通过案例来学习。
新建一个Maven项目,输入项目组标识符符与项目标识符:


指定项目名及位置:


在pom.xml文件里配置jar包依赖:


Spring管理Bean有三种方式:1、基于XML配置的方式2、基于注解的方式3、基于Java配置的方式
我们先学习基于XML配置的方式。
场景:勇敢的骑士去完成杀龙的任务。
按照面向对象的观点,要定义两个类:BraveKnight和SlayDragonQuest。
(1)创建杀龙任务SlayDragonQuest类

package net.hw.spring.ch1.xmlconfig;

/**
* Created by howard on 2017/2/24.
*/
public class SlayDragonQuest {
public void embark() {
System.out.println("执行杀龙任务。");
}
}(2)创建勇敢骑士BraveKnight类

package net.hw.spring.ch1.xmlconfig;

/**
* Created by howard on 2017/2/23.
*/
public class BraveKnight {

private SlayDragonQuest slayDragonQuest;

public void setSlayDragonQuest(SlayDragonQuest slayDragonQuest) {
this.slayDragonQuest = slayDragonQuest;
}

public void embarkOnQuest() {
slayDragonQuest.embark();
}
}回顾一下传统方式怎么使用这两个类。需要我们自己通过new实例化两个类,然后设置勇敢骑士对象的杀龙任务属性,然后调用勇敢骑士执行任务的方法。

package net.hw.spring.ch1.xmlconfig;

/**
* Created by howard on 2017/2/24.
*/
public class TestBraveKnightOld {
public static void main(String[] args) {
// 创建杀龙任务对象
SlayDragonQuest slayDragonQuest = new SlayDragonQuest();
// 创建勇敢骑士对象
BraveKnight braveKnight = new BraveKnight();
// 设置勇敢骑士杀龙任务属性
braveKnight.setSlayDragonQuest(slayDragonQuest);
// 勇敢骑士执行任务
braveKnight.embarkOnQuest();
}
}运行TestBraveKnightOld程序:


下面我们让项目增加Spring功能。
在Project Structure对话框里,选中左面板列表中的Modules,添加Spring,如下图所示:


将以前项目中用的log4j.properties文件拷贝到resource目录。
在resources目录里创建子目录xmlconfig,新建一个Spring配置文件:






在配置文件里定义两个Bean:
(1)杀龙任务Bean
<bean id="slayDragonQuest" class="net.hw.spring.ch1.xmlconfig.SlayDragonQuest"/>
(2)勇敢骑士Bean
<bean id="braveKnight" class="net.hw.spring.ch1.xmlconfig.BraveKnight">
<property name="slayDragonQuest" ref="slayDragonQuest"/>
</bean>
id属性:对应对象名,可以任取,我们可以通过这个id值从Spring容器中获取Bean对象。class属性:表明Bean对象是基于哪个类来实例化。
勇敢骑士Bean通过<property>元素将杀龙任务Bean注入作为其属性。注意,name属性值一定是Knight类的属性名,ref属性值是已定义的杀龙任务Bean的id值。


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="slayDragonQuest" class="net.hw.spring.ch1.xmlconfig.SlayDragonQuest"/>
<bean id="braveKnight" class="net.hw.spring.ch1.xmlconfig.BraveKnight"> <property name="slayDragonQuest" ref="slayDragonQuest"/> </bean>

</beans>
通过Spring配置文件,我们创建了两个Bean,它们之间存在依赖关系。
下面我们采用新方式来测试。创建TestBraveKnightNew类。


package net.hw.spring.ch1.xmlconfig;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* Created by howard on 2017/2/24.
*/
public class TestBraveKnightNew {
public static void main(String[] args) {
// 基于Spring配置文件创建应用容器
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");
// 根据名称从应用容器中获取勇敢骑士对象
BraveKnight braveKnight = (BraveKnight) context.getBean("braveKnight");
// 勇敢骑士执行任务
braveKnight.embarkOnQuest();
// 关闭应用容器
context.close();
}
}
说明:首先通过Spring配置文件创建Spring应用容器,然后就可以利用容器的getBean方法通过名称获取容器里的Bean对象,然后调用该对象的方法。
运行程序,结果如下图所示:


我们知道基于一个类可以创建多个对象,因此,在spring-config.xml文件里,也可以基于同一个类创建多个Bean。
比如我们基于BraveKnight类可以再创建两个Bean,id值分别为knight1和knight2。


修改TestBraveKnightNew类的代码:


程序运行结果如下:




勇敢骑士Bean采用属性注入方式将杀龙任务Bean注入作为其属性。
另外还有一种注入方式,叫做构造函数注入。我们同样通过案例来演示。
1、创建拯救少女任务RescueDamselQuest类


2、创建拯救少女之骑士DamselRescuingKnight类


通过构造方法来设置骑士要执行的任务。
package net.hw.spring.ch1.xmlconfig;

/**
* Created by howard on 2017/2/24.
*/
public class DamselRescuingKnight {

private RescueDamselQuest rescueDamselQuest;

public DamselRescuingKnight(RescueDamselQuest rescueDamselQuest) {
this.rescueDamselQuest = rescueDamselQuest;
}

public void embarkOnQuest() {
rescueDamselQuest.embark();
}
}
3、修改Spring配置文件spring-config.xml

<bean id="rescueDamselQuest" class="net.hw.spring.ch1.xmlconfig.RescueDamselQuest"/>
<bean id="damselRescuingKnight" class="net.hw.spring.ch1.xmlconfig.DamselRescuingKnight">
<constructor-arg ref="rescueDamselQuest"/>
</bean>4、创建测试类TestDamselRescuingKnight

package net.hw.spring.ch1.xmlconfig;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* Created by howard on 2017/2/24.
*/
public class TestDamselRescuingKnight {
public static void main(String[] args) {
// 基于Spring配置文件创建应用容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");
// 根据名称从应用容器中获取拯救少女之骑士对象
DamselRescuingKnight damselRescuingKnight = (DamselRescuingKnight) context.getBean("damselRescuingKnight");
// 拯救少女之骑士执行任务
damselRescuingKnight.embarkOnQuest();
// 关闭应用容器
context.close();
}
}运行结果如下:


思考一下,如果我们有几十个类要创建Bean,采用XML配置方式是不是会让Spring配置文件显得很臃肿,怎么解决这个问题呢?我们下一讲会引入注解方式来解决这个问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: