- Spring 特点:
-
1.轻量级:从大小与开销两方面而言都是经典的, 完整的spring框架可以在一个大小只有1M多的JAR文件里发布,
-
并且Spring所需的处理开销也是微不足道的, 此外, Spring是非侵入性 的, 典型的, Spring应用中的对象不依赖于Spring的特定类
-
2.控制反转:Spring通过一种称作控制反转IOC的技术促进了低耦合,当应用了IOC,一个对象依赖的其他对象会通过被动的方式传递进来,
-
而不是这个对象自己创建或查找依赖对象
-
3.面向切面:Spring 支持面向切面的编程, 并且把应用业务逻辑和系统服务分开
-
4.容器: Spring 包含并管理应用对象的配置和生命周期, 在这个意义上它是一种容器, 你可以配置你的每个bean如何被创建, 基于一个可
-
配置原型, 你的bean可以创建一个单独的实例或者每次需要是都生成一个新的实例,以及他们是如何相互关联的
-
5.框架:Spring 可以将简单的组件配置, 组合为复杂的应用, 在Spring中,应用对象被声明式的组合, 典型的是在一个XML
-
文件里, Spring 也提供了很多基础功能, (事务管理、持久化框架集成等,)将应用逻辑的开发留给开发者
- Spring 核心组件:
-
Data Access/Integration: JDBC ,ORM,OXM ,JMX ,Transactions
-
Web(MVC/Remoting) :Web,Servlet, Portlet, Struts
-
AOP
-
Aspects
-
Instrumentation
-
Core Container: Beans , Core,Context,Expression Language
-
Test
*Spring 常用模块:
-
1.核心容器:核心容器提供Spring框架的基本功能, 核心容器的主要组件是BeanFactory, 它是工厂模式的实现, BeanFactory使用
-
控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开
-
2.Spring上下文:Spirng上下文是一个配置文件, 向Spring 框架提供上下文信息, Spring 上下文包括企业服务,
-
列如:JNDI,EJB,电子邮件,国际化,校验和调度功能
-
3.Spring Aop:通过配置管理特性, Spring AOP 模块直接将面向切面的编程功能集成到了Spring 框架中,可以将一些通用任务, 如
-
安全, 事务, 日志等集中进行了管理, 提高了复用性和管理的便捷性
-
4.Spring Dao 为JDBC Dao 抽象层提供了有意义的异常层次结构, 可用该结构来管理异常处理和不同数据库供应商的错误信息,
-
异常层次结构简化了错误处理,并且极大地减低里需要编写的异常代码数量, (列如打开和关闭连接),Spring Dao
-
的面向JDBC的异常遵从通用DAO异常层次结构
-
5.Spring ORM Spring 框架插入了若干个ORM框架, 从而提供了 ORM的对象关系工具 ,其中包括JDO,Hibernate,
-
iBatis SQL Map ,所有这些都遵从Spring 的通用事务和DAO异常层次结构
-
6.Spring Web模块: Web上下文模块建立在应用程序上下文模块之上, 为基于Web的应用程序提供了 上下文,所以, Spring
-
框架支持与Jakarta Struts 的集成,Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作
-
7. Spring MVC框架:MVC框架是一个全功能的Web应用程序的MVC 实现, 通过策略接口, MVC框架变成诶高度可配置的,
-
MVC容纳了大量视图技术,其中包括JSP,Veloctiy,Tiles,Itext和POI;
- 主要jiar包:
-
1.core:Spirng的核心工具包, 其他包依赖此包
-
2.beans:所有应用都用到, 包含配置文件, 创建和管理bean都能
-
3.aop:Spring 的面向切面编程,提供AOP的实现
-
4.context:提供在基础IOC功能上的扩展服务, 此外还提供许多企业级服务的支持, 有邮件服务, 任务调度, JNDI定位,
-
EBJ集成,远程访问,缓存以及多种视图框架的支持
-
5.web.mvc:包含Spring MVC应用开发时 所需的核心类
-
6.transaction:为JDBC,HIBERNATE,JDO,JPA提供一致性的声明式和编程是事务管理
-
7.web:包含Web应用开发时, 用Spring 框架时所需的核心类
-
8.aspects:Spirng提供的对 AspectJ框架的整合
-
9.test:对JUNIT 等测试框架的 简单封装
-
10.asm: Spring 3.0开始提供自己的独立的asm.jar包
-
11.context.support:Spring context 的扩展支持,用于MVC 方面
-
12.expression: Spring表达式语言
-
13.instrument.tomcat:Spring 对tomcat 连接池的集成
-
14.instrument:Spring对服务器端代理接口
-
15.jdbc:对jdbc的简单封装
-
16.jms:为简化jms api 的使用而做简单的封装
-
17.orm:整合第三方的orm实现,如hibernate,ibatis,jdo,jpa等
-
18.oxm:Spring对于object、xml映射的支持, 可以让java与XML来回切换
-
19.web.portlet:Spring MVC的增强
-
20.servlet: 对 servlet3.0的支持
-
21.web.struts:整合对struts框架的支持, 更方便更容易的集成Struts框架
*Spring 常用注解
-
bean注入和装配的方式有很多种, 可以通过xml,get ,set方式, 构造函数, 或者注解等 ,简单易用的方式就是使用
-
Spring 的注解了, Spring 提供了大量的注解方式
-
1.
-
@Controller: 用于标注控制层组件,@Controller用于标记在一个类上, 使用它标记的类就是一个SpringMVC
-
Controller对象, 分发处理器将会扫描使用了该注解的类的方法, 并检测该方法是否使用@RequestMapping注解
-
可以把Request请求header部分的值绑定到方法的参数上
-
@RestController: 相当与@Controller和 @ResponseBody 的组合效果
-
@Component 泛指组件,当组件不好归类的时候, 我们可以使用这个注解进行标注
-
@Respository 用于注解dao层, 在daoimpl类上面注解
-
@Service 用于标注业务层注解
-
2.
-
@ResposeBody 异步请求: 该注解用于将Controller的方法返回的对象, 通过适当的HttpMessageConveter转换
-
为指定格式后,写入到Response对象的body数据去
-
@RequsetMapping 一个用来处理请求地址映射的注解, 可用于类或方法上,用于类上, 表示类中所有的响应请求的方法
-
都是以该地址作为父路径
-
@Autowired 他可以对类成员变量, 方法以及构造器 进行标注, 完成自动装配的工作, 通过@Artowired的使用来消除set,
-
get方法
-
@PathVariable 用于将请求的url 的模块变量映射到功能处理方法的参数上, 既取出url模板中的变量作为参数
-
@RequestParm 主要用在SpringMvc后台控制层获取参数,类似一种是request.getParameter("name")
-
@RequestHeader 可以把Request请求header 部分的值绑定到方法的参数上
-
3.
-
@ModelAttribute 该Controller的所有方法在调用前,先执行此@ModelAttribute 方法,可用于注解和方法参数
-
中,可以把这个@ModelAttribute特性,应用在BaseController 当中,所有的Controller继承BaseController,
-
既可实现在调用Controller时,先执行
-
@SessionAttribute 既将值放到session 作用域中 , 写在class 上,
-
@Valid 实现数据校验, 可以结合 hibernate validator一起使用
-
@CookieValue 用来获取Cookie 中的值
*Spirng IOC原理
-
概念:
-
Spirng 通过一个配置文件描述Bean及Bean之间的依赖,利用java语言的反射 功能实例化Bean并建立Bean
-
之间的依赖关系,Spring 的IOC 容器在完成这些底层工作的基础上,还提供了Bean实例缓存, 生命周期管理,
-
Bean实例管理, 事件发布, 资源装载等高级服务
-
Spring容器高层视图:
-
Spring 启动时读取应用程序提供 的Bean配置信息,并在Spring 容器中生成一份相应的Bean配置注册表,
-
然后根据这张注册 表实例化Bean ,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境,其中Bean 缓存池为HashMap实现
-
IOC容器实现:
-
BeanFactory 框架基础设施
-
BeanFactory是Spring 框架 的基础设施, 面向Spring本身;ApplicationContext面向使用Spirng框架的开发者
-
,几乎所有的应用场合我们都直接使用ApplicationContext而非底层的BeanFactory
-
1.1 BeanDefinitionRegistry注册表
-
1.Spring配置文件中每一个节点元素在Spring容器里都通过一个BeanDefinition对象表示, 它描述了Bean的
-
配置信息, 而BeanDefinitionRegistry 接口提供了向容器手动注册BeanDefinition 对象的方法
-
1.2 BeanFactory顶层接口
-
2.位于类结构树的顶端, 它最主要的方法就是getBean(String beanName),该方法从容器中返回特定名称的Bean
-
BeanFactory的功能通过其他的接口得到不断扩张
-
1.3 listableBeanFactory
-
3.该接口定义了访问容器的Bean基本信息的若干方法,如查看Bean的个数,获取某一类型Bean的配置名,查看容器
-
中是否包括某一Bean等方法
-
1.4.HierarchicalBeanFactory父子级联
-
4.父子级联 IOC容器的接口,子容器可以通过接口方法访问父容器, 通过HierarchicalBeanFactory接口, Spring
-
的IOC容器可以换建立父子层级关联的容器体系, 子容器可以访问父容器的Bean,但父容器不能访问子容器的Bean
-
Spring 使用父子容器实现了很多功能, 比如在Spring MVC 中, 展现层Bean位于一个子容器中, 而 业务层和
-
持久层的Bean 位于父容器中, 这样, 展现层Bean 就可以引用业务层和持久层 的Bean,而业务层和持久层的
-
Bean就可以引用业务层和持久层的 Bean ,而业务层和持久层的Bean 则看不到展现层的Bean
-
1.5 ConfigurableBeanFactory
-
5.是一个重要的接口, 增强了IOC容器的可定制性,它定义了设置类装载器,属性编辑器, 容器初始化后置处理器等方法
-
1.6 AutowireCapableBeanFactory 自动装配
-
6.定义了将容器中的Bean 按某种规则(如按名字匹配,按类型匹配的等) 进行自动装配的方法
-
1.7 SingletonBeanRegistry 运行期间注册单例Bean
-
7.定义了允许在运行期间向容器注册单单实例Bean的方法, 对于单实例(singleton) 的Bean来说, BeanFactory
-
会缓存Bean实例, 所以第二次使用getBean()获取Bean时将直接从IOC容器的缓存中获取Bean实例, Spring在
-
DefaultSingletonBeanRegistry类中提供了一个用于缓存但实例Bean的缓存器,它是一个用HashMap实现的缓存器,
-
单实例的Bean以beanName 为键保存在这个HashMap中
-
1.8依赖日志框架
-
8. 在初始化BeanFactory 时, 必须为其提供一种日志框架, 比如使用Logj,既在类路径下提供Log4J 配置文件,
-
这样启动Spring容器才不会报错
-
ApplicationContext 面向开发应用
-
ApplicationContext有 BeanFactory派生而来,提供了更多面向实际应用的功能, ApplicationContext 继承了HierarchicalBeanFactory
-
和ListableBeanFactory接口, 在此基础上,还通过多个其他的接口扩展了BeanFactory的功能
-
ClassPathXMLApplicationContext :默认从类路径中加载配置文件
-
FileSystemXMLApplicationContext
-
ApplicationEventPublisher
-
MessageSource
-
ResourcePatternResolver
-
LifeCycle:该接口提供了start()和stop方法 注意用眼控制异步处理过程, ApplicationContext 会将start、stop
-
的信息传递给容器中所有实现了该接口的Bean , 以达到管理和控制JMX,任务调度等目的
-
ConfigurableApplicationContext
-
WebApplication体系架构
-
WebApplicationContext是专门为Web应用准备的, 它允许
-
Spring Bean 作用域
-
1.Singleton
-
2.prototype
-
3.request
-
4.session
-
5.global session
-
Spring Bean的生命周期
-
1.实例化
-
2.IOC 依赖注入
-
3.setBeanName实现
-
4.BeanFactoryAware 实现
-
5.ApplicationContextAware实现
-
6.postProcessBeforeInitialization
-
7.init-method
-
8.postProcessAfterInitialization
-
9.Destroy 过期自动清理阶段
-
10.destroy-method 自动配置清理