传统开发
传统的java开发也可以实现跨平台、易移植等特性,但是传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现“一次编写,到处运行”,EJB同样是重量级,结构复杂、臃肿,开发难度大。终于在2003年产生了一个轻量级框架Spring。
Spring
在学习它之前我们先来了解一下它是什么。
Spring是一个Java的轻量级开源框架,它是为了解决企业应用开发的复杂性而创建的。它使用基本的JavaBean来完成以前只可能由EJB完成的事情。它致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
简单来说,Spring的核心就是轻量级的控制反转和面向切面的容器框架。
Spring的优点
- 轻量级。从大小与开销两方面而言Spring都是轻量的,并且Spring是非侵入式的:Spring应用中的对象不依赖于Spring的特定类。
- 控制反转。Spring通过控制反转进而解耦合,它可以实现让容器在对象初始化时就主动将依赖传递给它,解决了了各种new和查找这种耦合的存在。
- 面向切面。Spring提供了面向切面编程的丰富支持,通过分离应用的业务逻辑与系统级服务进行内聚性的开发。开发要做的仅仅是专注业务逻辑即可。
- 容器性。Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,开发者可以为每个bean定制创建的时间、如何被创建、以及之间的相互关联。
耦合问题
引用耦合
UserDao userDao=new UserDaoMysqlImpl();
userDao.addUser(username, password);
这样的代码经常出现在程序开发中,但是这种new的方式让两个类或对象更加耦合,如何解耦?
业务与服务
try {
session=HibernateUtils.getSession();
session.getTransaction().begin();
IdCard idCard=new IdCard();
idCard.setCardNo("111");
Person person= new Person();
person.setName("Monday");
person.setIdCard(idCard);
session.save(person);
session.getTransaction().commit();
}
同样,这样的代码同样经常出现在编程中,很明显session=HibernateUtils.getSession();session.getTransaction().begin();及session.getTransaction().commit();都是对事务的管理,它们与具体的业务不应当是耦合在一起的,这样的问题如何解决?
在此留个悬念,提前可以剧透的是Spring可以很合理的解决这些问题。
总结
这篇博客先简单介绍一下Spring,从它因何产生、如何使用角度,先宏观地看,进而再进入细节中分析。