1.Spring框架
理念包括:
IoC(Inversion of Control,控制反转);
AOP(Aspect Oriented Programming ,面向切面编程)
1.1.1 Spring IoC
IoC为一个容器,在Spring中它认为一切Java资源都是Java Bean,容器的目标即为管理这些Bean和他们之间的关系。Spring IoC中装载各种Bean,他们由IoC容器管理。
- Java Bean 之间会存在一定的依赖关系。
- Spring 是依靠描述完成对象的创建及其依赖关系。
例子:
比如插座,它依赖国家标准去定义,现有两种插座(Socket1,Socket2)
有两种插座可供选择,具体选择那种呢?通过代码实现使用插座1:
Socket socket = new Socket1();
user.setSocket(socket);
user.useSocket();
上述这种使用方式Socket接口和其实现类Socket1耦合了。
Spring IoC解决了这个问题。不用new的方式创建对象,而是使用配置的方式,让Spring IoC容器自己通过配置去找插座。
用一段XML描述插座和用户的引用插座1如下:
<bean id="socket" class ="Socket1" />
<bean id="user" class="xxx.User">
<property name="socket" ref="socket"/>
</bean>
更换插座2只需要把配置切换为:
<bean id="socket" class ="Socket2" />
“我要插座2” 相当于XML依赖关系配置,这个时候Spring IoC只会拿插座2,然后通过国家标准插座接口注入给使用者,提供给使用者使用。这是一种被动行为。需要的资源(Bean)通过描述信息就可以得到,其中的控制权在Spring IoC 容器中,他会根据描述找到使用者需要的资源,这就是控制反转。
你不需要去找资源,只要向Spring IoC 容器描述所需要的资源,Spring IoC 自己会找到你需要的资源,这就是Spring IoC的理念。
1.1.2 Spring AOP
IoC的目标是管理Bean,而Bean是Java面向对象(OOP)设计的基础 。
而有些情况是面向对象没有办法处理的。例如,生产部门的订单,生产部门,财务部门三者符合OOP的设计理念。订单发出,生产部门审批通过准备付款,但是财务部门发现订单的价格超支了,需要取消订单。显然超支限定已经不止影响财务部门了,还会影响生产部门之前所做的审批,需要把它们作废,我们把预算超支这个条件称为切面,它影响了订单,生产部门,财务部门3个OOP对象。在现实生活中,这样的切面条件跨越了3个甚至更多的对象,并且影响了它们的协作。所以只用OOP并不完善,还需要面向切面编程,通过它去管理在切面上的某些对象之间的操作。
- Spring AOP 常用于数据库事务的编程。
- Spring已经提供了隔离级别和传播行为去进行控制。