1、Spring实现了工厂模式的工厂类,这个类名为BeanFactory(接口),
在程序中通常用他的子类ApplicationContext。
Spring相当于一个大的工厂类,在其配置文件中通过<bean>元素配置用于
创建实例对象的类名和实例对象的属性。

工厂模式是一种生产对象型的设计模式,有了工厂模式后,当需要某个类的
对象时,就不再需要new指定的类,而是调用工厂中的方法即可。也就不需要
关心对象的创建过程。甚至有时候也许你需要的对象只要是某种大分类的类型
就可以了,而不必是某个指定的类型。不会过渡依赖某个类,这些类都是
易于被替换的,以提高整个项目的可维护性。

2、Spring提供了对IOC(控制反转)良好支持,IOC也是一种编程思想,
是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。 
IOC就是对对象的创建、维护、销毁等生命周期的控制,这个过程一般是
由我们的程序去主动控制。
DI也是IOC的重要实现。一个对象的创建往往会涉及到其他对象的创建,
这就是依赖。IOC机制既然负责了对象的创建,
那么这个依赖关系也就必须由IOC容器负责起来。
负责的方式就是DI——依赖注入,通过将依赖关系写入配置文件,
然后在创建有依赖关系的对象时,由IOC容器注入依赖的对象。
如在创建A时,检查到有依赖关系,IOC容器就把A依赖的对象B
创建后注入到A中(组装,通过反射机制实现),然后把A返回给对象请求者,完成工作。

3、Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,
就是系统中有很多各不相干的类的方法,
在这些众多方法中要加入某种系统功能的代码,
如加入日志,权限判断,异常处理,这种应用称为AOP。

实现AOP功能采用的是代理技术,客户端程序不再调用目标,
而调用代理类,代理类与目标类对外具有相同的方法声明。

有两种方式可以实现相同的方法声明,一是实现相同的接口,
二是作为目标的子类。在JDK中采用Proxy类,产生动态代理的
方式为某个接口生成实现类,如果要为某个类生成子类,则采用CGLIB。

系统功能的代理以Advice对象进行提供,要创建出代理对象,
至少需要目标类和Advice类。Spring提供了这种支持,
只需要在Spring配置文件中配置这两个元素即可实现代理和AOP功能。