- Spring的bean容器
- 介绍Spring的核心模块
- 更为强大的Spring生态系统
- Spring的新功能
一、简化java开发
为了降低Spring开发的复杂性,Spring采取了以下4钟关键策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和惯性进行声明式编程;
- 通过切面和模板减少样式代码。
1、激发POJO潜能(POJO即普通的java类)
2、依赖注入(dependency injection DI)
依赖注入这个词让人望而生畏,现在已经演变成一项复杂的编程技巧或设计模式理念。但事实证明依赖注入并不像它听上去那么复杂,在项目中应用DI,你会发现你的代码会变得异常简单而且更容易理解和测试。
① DI功能是如何实现的
程序都是由多个类组合而成的,这些类之间进行协作完成特定的业务逻辑。按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码。
② 耦合具有两面性。
一方面,紧耦合的代码难以测试、难以复用、难以理解,并且典型地表现出“打地鼠”式的bug特性(修复一个bug,将会出现一个或者更多的新bug)。另一方面,一定程序的耦合又是必须的,完全没有耦合的代码啥也做不了。为了完成有实际意义的功能,不同的类必须以适当的方式进行交互。总而言之,耦合是必须的,但应当被小心谨慎的管理。
通过DI,对象的依赖关系将由系统中负责协调各队的第三方组件在常见对象的时候进行设定。对象无需自行创建或管理他们的依赖关系,如下图,依赖关系将自动注入到需要他们的对象中去。
③ 依赖注入的方式
spring支持3种依赖注入的方式
- 属性注入
属性注入即通过setter方法注入bean的属性值或依赖的对象
属性注入使用元素,使用name属性指定bean的属性名称,value属性或子节点属性值
属性注入是实际开发中最常见的注入方式
public void setName(String name)
{
System.out.println("setName:"+name);
this.name=name;
}
<bean id="helloWorld" class="spring.bean.HelloWorld">
<property name="name" value="Spring"></property>
</bean>
- 构造器注入
通过构造方法注入bean的属性值或者依赖的对象(引用),保证了bean实例在实例化后就可以使用
构造器注入在元素里声明属性,没有name属性
创建一个People对象
package com.container;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class People {
private String name;
private String sex;
private int age;
public People(String name, int age) {
this.name = name;
this.age = age;
}
public People(String name, String sex) {
this.name = name;
this.sex = sex;
}
@Override
public String toString() {
return "people{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml"