【720科技SpringMVC】第一课:Spring框架

内容关键词:框架、数据,配置,依赖注入

知识来源 720科技(张森鹏)

一、知识笔记

Spring 框架是一个开源的企业应用开发框架,作为一个轻量级的解决方案,它包含 20 多个不同的模块。本书主要关注 CoreSpring BeanSpring MVC Spring MVC Test 模块。
本章主要介绍 Core Spring Bean 这两个模块,以及它们如何提供依赖注入解决方案。为方便初学者,本书会深入讨论依赖注入概念的细节。

依赖注入技术作为代码可测试性的一个解决方案已经被广泛应用 。

依赖注入是当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来王城,因此成为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也被称为依赖注入。

二、重要笔记

1.XML配置文件

1.0 版本开始, Spring 就支持基于 XML 的配置;从 2.5 版本开始,增加了通过注解的配置支持。下面介绍如何配置 XML 文件。配置文件的根元素通常为 beans

<?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">
...
</beans>
如果需要更强的 Spring 配置能力,可以在 schema location 属性中添加相应的 schema, 也可以指定 schema 版本:

http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

2.Setter 方式依赖注入
下面以 Employee 类和 Address 类为例,介绍 setter 方式依赖注入(见清单 1.3 和清单 1.4)。
清单 1.3 Employee
package springintro.bean;
public class Employee {
private String firstName;
private String lastName;
private Address homeAddress;
public Employee() {
}
public Employee(String firstName, String lastName, Address
homeAddress) {
this.firstName = firstName;
this.lastName = lastName;
this.homeAddress = homeAddress;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Address getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(Address homeAddress) {
this.homeAddress = homeAddress;
}
@Override
public String toString() {
return firstName + " " + lastName

+ "\n" + homeAddress;
}
}
清单 1.4 Address
package springintro.bean;
public class Address {
private String line1;
private String line2;
private String city;
private String state;
private String zipCode;
private String country;
public Address(String line1, String line2, String city,
String state, String zipCode, String country) {
this.line1 = line1;
this.line2 = line2;
this.city = city;
this.state = state;
this.zipCode = zipCode;
this.country = country;
}
// getters and setters omitted
@Override
public String toString() {
return line1 + "\n"
+ line2 + "\n"
+ city + "\n"
+ state + " " + zipCode + "\n"
+ country;
}
}
Employee 依赖于 Address 类,可以通过如下配置来保证每个 Employee 实例都能包含
Address 实例。
<bean name="simpleAddress" class="springintro.bean.Address">
<constructor-arg name="line1" value="151 Corner Street"/>
<constructor-arg name="line2" value=""/>
<constructor-arg name="city" value="Albany"/>
<constructor-arg name="state" value="NY"/>
<constructor-arg name="zipCode" value="99999"/>

<constructor-arg name="country" value="US"/>
</bean>
<bean name="employee1" class="springintro.bean.Employee">
<property name="homeAddress" ref="simpleAddress"/>
<property name="firstName" value="Junior"/>
<property name="lastName" value="Moore"/>
</bean>
simpleAddress 对象是 Address 类的一个实例,它通过构造器方式实例化。 employee1 对象则通过配置 property 元素来调用 setter 方法以设置值。需要注意的是, homeAddress 属性配置的是 simpleAddress 对象的引用。

被引用对象的配置定义无需早于引用其对象的定义。在本例中, employee1 对象可以出现在 simpleAddress 对象定义之前。

3.构造器方式依赖注入
清单 1.3 所示的 Employee 类提供了一个可以传递参数的构造器,我们还可以将 Address
对象通过构造器注入,如下所示:
<bean name="employee2" class="springintro.bean.Employee">
<constructor-arg name="firstName" value="Senior"/>
<constructor-arg name="lastName" value="Moore"/>
<constructor-arg name="homeAddress" ref="simpleAddress"/>
</bean>
<bean name="simpleAddress" class="springintro.bean.Address">
<constructor-arg name="line1" value="151 Corner Street"/>
<constructor-arg name="line2" value=""/>
<constructor-arg name="city" value="Albany"/>
<constructor-arg name="state" value="NY"/>
<constructor-arg name="zipCode" value="99999"/>
<constructor-arg name="country" value="US"/>

</bean>

三、学习参考

https://blog.csdn.net/taijianyu/article/details/2338311/

https://blog.csdn.net/zxiang248/article/details/51785377

SpringMVC学习指南

猜你喜欢

转载自blog.csdn.net/qq_41950122/article/details/80024347