1
Spring是个开源框架,为了解决企业级应用开发而创作出来。Spring不仅仅局限于服务端开发,而且任何的java应用都能借助于spring变得更简单,可测试性强,松耦合性好(彼此之间的信息最少)。
2
Spring框架有哪些特征?
1)轻量
从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。
2)控制反转(IOC)
可以不用new方法来创建对象,Spring框架可以实现所有对象的创建和依赖关系维护。
举例:(传统的程序设计:)
使用IOC/DI容器后程序设计:
3)面向切面编程(AOP)
AOP解决了什么问题?
主要是在程序开发中用来解决一些系统层面上的问题,比如日志,食物,让权等待。
举例:从事务的层面来理解AOP
比如我们现在要做一个ATM系统。
假设有这样的两个流程:
1.开始 -> 验证用户 -> 取款 -> 结束。
2.开始 -> 验证用户 -> 显示余额 -> 结束。
我们可以发现,验证用户的代码明显重复了,这不符合我们的低耦合,高内聚的思想。这是aop就起作用了。
作用实例图:
我们可以写一个验证用户的类,然后依次跟取款,查询,转账绑定,就不用费事的写三遍了。为什么说是面向切面,因为我们从图中可以看出,验证用户这一条线,切了取款,查询,转账的操作。
关键代码举例:
<!-- 注解形式 开启aop -->
<aop:aspectj-autoproxy ></aop:aspectj-autoproxy>
<!-- 创建对象 -->
<bean id="User" class="cn.its.aop.User"></bean>
<bean id="Verification" class="cn.its.aop.Verification"></bean>
User.java
package cn.its.aop;
public class User {
public void Withdraw() {
System.out.println("我要取一个亿");
}
public void query()
{
System.out.println("我要查我还有多少钱");
}
}
Verification.java
package cn.its.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//@Component(value="user") 对象注解
//aop注解
//Transactional 事务注解
@Aspect //切面
public class Verification {
@Before(value = "execution(* cn.itcast.aop.User.*(..))")//表示User内所有的方法 都要验证
public void before1(){
System.out.println("我要验证你 是不是我的用户");
System.out.println("|");
System.out.println("V");
}
}
运行结果:
我要验证你是不是我的用户
|
V
我要取一个亿
我要验证你是不是我的用户
|
V
我要查我还有多少钱。
3
方便集成各种优秀的框架
4
方便程序的测试,spring对junit4支持。