spring 简介
spring是什么
spring 是一个开源的轻量级控制反转 (inversion of control -> IOC ) 和面向切面( AOP )
的容器框架,它主要的目的是简化企业开发
重点:
两大核心特征 //不是什么技术,而是一种思想
1IOC
=控制反转 / (DI
=依赖注入)
2AOP
面向切面编程思想 ,而AOP思想在Spring中最重要的是提供 声明式事务处理
使用Spring 的好处
- 降低组件之间的耦合度,实现组件各层之间的解耦
- 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播
- 容器提供单例模式支持,开发人员不再需要自己编写实现代码
- 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能
- 容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate
- Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发
JPA是什么
JPA是持久称框架的规范,Hibernate就是其中的一个实现者
spring负责的内容
Spring 负责管理容器中所有的组件, 这些组件统称为Bean
, 在Spring
的概念里,一切都是Bean
。其实Spring就是面向Bean的编程(BOP,Bean Oriented Programming
)
组成Spring的模块都有什么
组成Spring的模块(组件)都可以单独存在 主要模块如下
1)Srping Core
核心容器: 提供Spring 框架的基本功能,核心容器的主要给件是BeanFactory
,它是工厂模式的实现BeanFactory
例用控制反转(IOC
) 模式将应用程序的配置和依赖规范与实际的应用程序代码分开
2)Spring Context //上下文的一个配置文件
Spring
上下文是一个配置文件,向Spring
框架提供上下文信息。Spring
上下文包括企业服务,例:JNDI 、EJB、电子邮件、国际化、校验和调度功能。
3)Spring AOP
通过配置管理特性,Spring AOP
模块直接将面向方面的编程功能集成到了Spring
框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP
。Spring AOP
模块为基于Spring
的应用程序中的对象提供了事务管理服务。通过使用Spring AOP
,不用依赖EJB
组件,就可以将声明性事务管理集成到应用程序中。
4)Sping DAO
DBC DAO
抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO
的面向 JDBC
的异常遵从通用的DAO
异常层次结构。
5)Spring ORM
Spring
框架插入了若干个ORM
框架,从而提供了ORM
的对象关系工具,其中包括JDO
、Hibernate
和iBatis SQLMap
。 所有这些都遵从Spring
的通用事务和DAO
异常层次结构。
6) Spring WEB
Web
上下文模块建立于应用上下文模块之上,提供了一个适合于Web
应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart
请求,它也提供了Spring
和其它Web
框架的集成,比如Struts
、WebWork
。
7) Spring MVC
Spring
为构建Web
应用提供了一个功能全面的MVC
框架。虽然Spring
可以很容易地与其它MVC
框架集成,例如Struts
,但Spring
的MVC
框架使用IoC
对控制逻辑和业务对象提供了完全的分离。它也允许你声明性地将请求参数绑定到你的业务对象中,此外,Spring
的MVC
框架还可以利用Spring
的任何其它服务,例如国际化信息与验证。
spring的目的
Spring
带来了复杂的J2EE
开发的春天。它的核心是轻量级的IoC
容器,它的目标是为J2EE应用提供全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其它的框架方案加以代替,Spring
希望为企业应用提供一站式(one-stopshop
)的解决方案
控制反转和依赖注入有什么区别?
IOC
和DI
有什么关系呢?其实它们是同一个概念的不同角度描述,以前创建对象都是通过new
关键字去创建,但是用了Spring
之后就可以不用这么创建对象了,把控制权交给Spring
容器,哪里用对象由容器给,这就是控制反转依赖注入就是站在应用程序的角度,当需要用某个对象的时候,由容器注入进来,这就是依赖注入
Spring的解释:
spring
是一个开源的轻量级 控制反转 (inversion of control -> IOC )
和面向切面( AOP ) 的容器框架,它主要的目的是简化企业开发Spring
可以理解为是Bean
容器或管理家,我们可以面向接口进行编程,当没有Spring
时,我们在业务逻辑层访问数据持久层时,是要new
出对象的,这样对项目层次间的解耦不是很好,但是用spring
之后,在应用程序中需要对象时,spring就会自动的给我们创建对象注入到我们所需的程序中来也降低了各个层次间的耦合度
spring 中的重要概念
Spring 中二个核心 IOC/DI AOP
1) IOC(控制反转)
应用本身不负责依赖对象的创建和维护,而是交给其他程序去创建, 这样,控制权就由应用转到了外
部容器,控制权的转移, 就叫控制反转
public class UserAction{
private UserDao userDao=new UserDaoImpl();
//业务方法
public String add(){
userDao.addUser(user);
}
}
----反转形式
public class UserAction{
private UserDao userDao=其他人创建(控制权转移);
//业务方法
public String add(){
userDao.addUser(user);
}
}
2) DI (依赖注入)
当我们把依赖对象交给外部容器负责创建,上面的程序可以改成
public class UserAction{
private UserDao userDao;
//业务方法
public String add(){
userDao.addUser(user);
}
.....get set 即可
}
在程序运行期,动态的由外部容器(Spring),将依赖对象注进来,这个过程称为依赖注入
3) AOP (Aspect Oriented Programming) 面向切面思想 例如Struts2 中拦截器
- 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术
- 是目前软件开发中的一个热点,
- 也是Spring框架中的一个重要内容,利用面向切面编程提供声明式事务管理。(重点)
- 而Spring中就是通过动态代理来实现AOP的(重点)
有两种方式可以实现aop,一种是根据利用jdk自带的proxy,另外一种是利用cglib的proxy.