spring原理(一)

spring是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。而且Spring仍然可以和其他的框架无缝整合。

Spring特点

  • 轻量级
    从大小和开销两个方面而言spring都是轻量级的,完整的spring框架可以在一个大小只有1M多的jar文件中发布,并且spring所需的处理开销也是微不足道的。
  • 控制反转
    spring通过一种乘坐控制反转IOC的技术促进了低耦合。当应用了IOC,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这对象资金创建或者查找一栏对象。
  • 面向切面
    spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
  • 容器
    spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建—基于一个可配置的原型,你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例–以及它们是如何互相关联的。
  • 框架集合
    spring可以将简单的组件配置,组合成复杂的应用。在spring中,应用对象被声明式的组合,典型的是在一个xml文件中。spring也提供了很多基础功能(事务管理,持久化框架集成等),将应用逻辑的开发留给开发者。
  • 方便解耦,简化开发
  • 声明式事务的支持
  • 降低Java EE API的使用难度

avatar

Spring核心组件

avatar

Spring常用模块

  • 核心容器
    核心容器提供spring框架的基本功能,核心容器的主要组件是BeanFactory,他是工厂模式的实现,BeanFactory使用控制反转模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring上下文
    Spring上下文是一个配置文件,向Spring框架提供上下文信息,Spring上下文包括企业服务,例如:JNDI,EJB,电子邮件,国际化,校验和调度功能。
  • Spring AOP
    通过配置管理特性,SpringAOP模块直接向面向切面的编程功能集成到了Spring框架中,可以将一些通用任务,如安全,事物,日志,等集中进行管理,提高了复用性和管理的便捷性。
  • Spring DAO
    为JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息,异常层次结构简化了错误处理,并且极大的降低了需要便携的异常代码数量,SpringDAO的面向JDBC的异常存从通用的DAO异常层次结构。
  • Spring ORM
    spring框架插入了若干和ORM框架,从而提供了ORM的对象关系工具,其中包括JDO,Hibernate,IBatista SQL Map。所有这些都遵从了Spring的通用实物和DAO的异常曾子结构。
  • Sping Web 模块
    Web上下文模块创建在应用程序上下文模块之上,为基于Web的应用程序创建了提供上下文,所以Srping框架支持Jakarta Struts的集成,Web模块还减缓了处理多部分请求以及将请求参数绑定到域对象的工作。
  • Spring MVC框架
    MVC框架是衣蛾全功能的构建Web应用程序的MVC实现,通过策略接口,MVC框架编程了高度可配置的,MVC容纳了大量的视图技术,其中包括JSP,Velocity,Ties,iTest和POI。

avatar

Spring主要包

core—-Spring核心工具包,其他包依赖此包
beans—-所有应用都用到,包含访问配置文件,创建和管理bean等。
aop—-Spring的面向切面编程,提供AOP(面向切面编程)的实现
context—-提供在基础IOC功能上的扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度。JNDI定位,EJB集成,远程访问,缓存以及多种视图层框架的支持。
web.mvc—-包含SpringMVC应用开发时所需的核心类。
transaction—-为JDBC,Hibernate,JDO,JPA提供一致的声明式和编程式事务管理
web—–包含Web应用开发时,用到Spring关键时所需的核心类。
aspects—-Spring提供的对AspectJ框架的整合
test—-对JUNIT等测试框架的简单封装
asm—-spring3.0开始提供自己独立的asm jar包
context.support—-spring context的扩展支持,用于MVC方面
expression—-Spring表达式语言
instrument.tomcat—-Spring对tomcat连接池的集成
instrument—-Spring对服务器的代理接口
jdbc—-为JDBC的简单封装
jms—-为简化jms api的使用而做的简单封装
orm—-整合第三方的orm实现,如hibernate,ibatis,jdo,jpa等
oxm—-Spring对于object/xml映射的支持,可以让java与xml来回切换
web.portlet—-Spring MVC的增强
web.servlet—-对J2EE6.0 servlet3.0的支持
web.struts—-整合对struts框架的支持,更方便更容易的集成Struts框架。
avatar

Spring 常用注解

bean注入与装配的的方式有很多种,可以通过xml,get set方式,构造函数或者注解等。简单易用的方式就是使用Spring的注解了,Spring提供了大量的注解方式。
【1】
@Controller
用于标注控制层组件,用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象,分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解,可以把Request请求header部分的值绑定到方法的参数上
@RestController
相当于@Controller和ResponseBody的组合效果
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Respository
用于注解dao,在daoimpl类上注解。
@Service
用于标注业务层组件
【2】
@ResponseBody
异步请求,该注解用于将Controller的方法返回的对象。通过适当的HttpMessageConverter转换为指定格式后,写入Response对象的body数据区。返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml)使用
@RequestMapping
一个用来处理请求地址映射的注解,可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
@Aurowired
可以对类成员变量、方法及构造函数进行标注、完成自动装配的工作,通过@Autowired的使用来消除setget方法
@PathValiable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即去除url模板中的变量作为参数
@RequestParam
主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”)
@RequestHeader
而言吧Request请求header部分的值绑定到方法的参数上
【3】
@ModelAttribute
该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特征,应用在BaseController当中,所有Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttibute方法。
@SessionAttributes
即将值放在session作用域中,卸载class上面。
@Valid
实体数据校验,可以结合hibernate validator以前使用
@CookieValue
用来获取Cookie中的值
avatar

装配注解比较

【包区别】
@Resource javax.annotation java
@Inject javax.inject java
@Qualifier javax.inject java
@Autowired org.springframework.bean.factory java
【@Autowored和@Inject】
二者基本相同,但@Autowird不能离开spring环境
1.按照类型匹配 2.按照限定符进行类型限定 3.按照名称匹配
【@Resource】
1.按照名称匹配,2.按照类型匹配 3.按照限定符进行类型限定(但如果名称匹配成功的话这条会被忽略)
avatar

Spring 第三方结合

【权限】
shiro,java的一个安全框架,认证,授权,加密,会话管理,与Web集成,缓存以及多种视图层框架的支持。
【缓存】
redis:一个开源的使用ANSI C语言填写,支持网络,可基于内存亦可持久化的日志型,Key-value数据库
【持久化框架】
Mybatis:是支持普通Sql查询,存储过程和高级映射的优秀持久层框架
【定时任务】
quartz:一个开源的作业调度框架,由java编写,在.NET平台为Quartz.net通过Quart可以快速的完成任务调度的工作。
Spring-Task:轻量型的Quartz,而且使用起来简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式。
【校验框架】
Oval:oval是一个可扩展的的java对象数据验证框架,验证的规则可以通过配置文件,Annotation,POJOs进行设定,可以使用纯java语言,javaScript,Groovy,BeanShell等进行规则的编写。
avatar