- 参考书目:《Spring In Action》
- IDE:Intellij Idea
Spring框架已经是基于POJO的轻量级开发框架的领导者,其应用已十分广泛,它的根本使命是简化Java的开发过程。
Spring关键特性范例
Spring的四种关键策略:
- 基于POJO(Plain Ordinary java Object)的轻量级和最小侵入性编程
- 通过依赖注入(DI)和面向接口实现松耦合
- 基于切面(AOP)和惯例进行声明式编程
- 通过切面和模版减少样板式代码
这些特性或策略看起来总是让人头疼,还是通过一些例子来解释Spring的关键特性
依赖注入和控制反转
依赖注入的关键作用在于解耦合,将类与类之间的对象引用进行统一管理,其实现原理是Java的反射机制。
下面举一个人骑车的例子:
People类:
1 package beijing.huangh.demos;
2
3 /**
4 * Created by huanghuan on 16/3/29.
5 */
6 public class People {
7 private Bike bike;
8
9 public People(Bike bike) {
10 this.bike = bike;
11 }
12
13 public void ridingBike() {
14 if (bike != null) {
15 bike.ridingBike();
16 }
17 }
18 }
Bike类:
1 package beijing.huangh.demos;
2
3 /**
4 * Created by huanghuan on 16/3/29.
5 */
6 public class Bike {
7 public void ridingBike() {
8 System.out.println("riding bike!!!");
9 }
10 }
通过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 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
5
6 <bean id="bike" class="beijing.huangh.demos.Bike"/>
7 <bean id="people" class="beijing.huangh.demos.People">
8 <constructor-arg ref="bike"/>
9 </bean>
10 </beans>
调用测试类:
1 package beijing.huangh.test;
2
3 import beijing.huangh.demos.People;
4 import org.springframework.context.ApplicationContext;
5 import org.springframework.context.support.ClassPathXmlApplicationContext;
6
7 /**
8 * Created by huanghuan on 16/3/29.
9 */
10 public class DemoTest {
11 public static void main(String[] args) {
12 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
13 People people = (People) context.getBean("people");
14 people.ridingBike();
15 }
16 }
输出结果:
从这个范例中我们可以看出,类对象的构建和相互引用都由Spring的配置文件控制,people
对象所需要的bike
对象,也是由Spring框架通过构造器去注入。这样的方式咋看起来确实能够降低项目的复杂度,开发起来更加便捷,同时可以有效重用对象。但可以预见的是,当一个项目较为庞大,有多达数百个类,在这种情况下,如果依旧采用上诉的配置文件装配方法,整个配置文件将显得十分庞杂。而且IDE往往对框架的支持有限,要知道一个对象被注入了什么其它对象,恐怕只能进行不断的file search
了,Spring是否能解决我所说的问题了,我将在接下来的学习中寻找答案。