Spring是什么
一个轻量级的企业应用开发框架
非侵入式的框架 应用对框架的依赖很小,很多时候应用代码都可以使用POJO风格。
POJO:没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
优点 :低耦合(类与类之间的联系) 高度可配置 易测试 开发简单。
侵入式与非侵入式的区别:
侵入式:
比如说Struts框架,我们在使用该框架的时候必须要继承其框架的一些类,这时框架就与我们的源代码结合,也就是侵入了我们的代码。
优缺点:
开发中可以更好的与框架结合,更充分的利用框架的功能,但是复用性差,如果我们去掉框架,源程序将不能运行,我们需要进行改动程序的时候需要从源代码中更改,这是非常麻烦的。
非侵入式:
如Spring框架,我们在使用Spring框架时无需在代码中继承框架的类,通常只需要配置XML的Sping完成依赖注入就可以使用了,这时框架就没有侵入到我们的源代码中,这就是非侵入式。
优缺点:
非侵入式的代码没有对框架产生过多的依赖,我们在需要修改功能时只需要修改XML配置文件就可以了,如果我们不需要框架了,直接更改XML以及一小部分源代码的一些配置就可以,并不会影响源程序的运行,可以很方便的迁移到其他地方。但是与用户代码互动的方式可能就比较复杂。
Spring结构框图:
Spring模块
Spring核心模块(Spring Core) :
Spring的核心容器模块,它提供IOC的支持。该模块中包含BeanFactory,它采用工厂模式来实现IOC,负责对bean的生命周期的管理。
Application Context(上下文模块) :
该模块扩展了BeanFactory的功能,例如提供了i18n,系统生命周期以及验证的支持
Spring的AOP模块:
该模块为应用系统的AOP开发提供了支持。
JDBC和DAO模块:
提供了JDBC封装的模板代码,使得使用JDBC开发更加简洁。
ORM映射模块:
该模块提供了对许多流行的ORM框架的支持,其中包括Hibernate,JDO和iBATIS SQL的支持
Spring Web模块:
该模块中Spring提供了对其它的WEB框架的支持,包知Struts,JSF,WEBWORK等
Spring MVC框架:
Spring提供的用于开发WEB应用的MVC框架
Spring核心应用
IOC(控制反转)
程序中各个组件之间的关系,不由程序代码直接操控,而由容器控制。控制权由应用代码中转到了外部容器,即所谓的反转。
更通俗的名称:DI(依赖注入)
各个组件之间的依赖关系不是在程序中写死,而是写在外部的配置文件中,然后运行时通过容器动态注入。
Spring核心容器提供了IOC的具体实现,所有的其它模块都是建立在它的基础之上。
什么是IOC(DI): 把自己new的东西改为由容器提供
有什么好处: 灵活装配//未使用IOC示例代码
private UserDao userDao = null;
public UserDao getUserDao(){
//未使用IOC,代码新建Dao的实例
userDao = new UserDao();
return userDao;
}
public void saveUser(User user){
//获取Dao,调用Dao的方法保存用户
getUserDao().save(user);
}//使用IOC示例代码
private UserDao userDao = null;
//容器自动调用该方法注入当前对象依赖的UserDao
public void setUserDao(UserDao userDao){
this.userDao = userDao ;
}
public void saveUser(User user){
//获取Dao,调用Dao的方法保存
userDao.save(user);
}