Spring是一个清量级框架,她大大简化了Java企业级开发,提供了强大,稳定的功能,有没有额外的负担,让人们在使用它做每件事情的时候都有得体的优越感的感觉.
Spring有两个主要的目标:一是让现有技术更易于使用,二是促进良好的编程习惯
spring是一个全面解决的方案,但它坚持一个原则:不重新发明轮子.已经有较好解决方案的领域,
spring绝不做重复性的实现
列如:对象持久化和ORM,Spring只是对现有的JDBC.mybatis.Hibernate等技术提供支持,让他们更加的便于使用
Spring框架由大约20个功能框架组成
这些模块分成六个部分,分别是Core Container,Data Access/InteGration,Web,AOP,Instrumentation及Test
Spring Core是框架最基础部分,提供IoC特性.spring Context为企业级开发提供了便利和集成的工具
Spring AOP是基于Spring Core的符合规范的面向切面编程的实现.Spring JDBC提供了JDBC的抽象层,
简化了JDBC代码,同时使代码更加健壮.
Spring IoC
理解控制反转
控制反转,也称依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度
什么是依赖关系
例子:
public interface UserDao{ void save(); }
public class UserDaoImpl implments UserDao{ public void save(){ System.out.println("实现save"); } }
//........不写UserService巨口了 public class UserserviceImpl implements UserService{ UserDao dao=new UserDaoImpl(); Public void save() { } }
以上代码UserServiceImpl对UserDaoImpl存在依赖关系.这样的代码是很常见的,但是存在一个严重的问题,即他们存在高度耦合,如果因为需求变化需要变化需要替换
UserDao的实现类,将导致UserServiceImpl中的代码随着发生修改.如此程序不具备优良的可扩展性,可维护性,甚至在开发中难以测试
我们可以利用简单工厂和工厂方法模式的思路来解决问题
public class UserDaoFactoty{ public static UserDao getInstance() { //创建Dao实例的过程 } } public class UserServiceImpl implenments UserService { user dao=UserDaoFactory.getInstance(); }
这里的用户Dao工厂类UserDaoFactory体现了控制反转的思想:UserServiceImpl不在依靠自身的代码去获得所依赖的具体DAO对象,而是把这一工作转交给了第三方
从而避免了和UserDao实现之间的耦合.由此可见,在如何获取控制依赖的对象这件事情上,控制权发生了反转
但这种方式虽然解决了问题,但是大量的工厂类会被引入开发的过程中,明显增加了代码量.
而Spring能够替我们分担这些工作,为我们提供完整的ioC实现,让我们专注于业务类和DAO类的设计