什么是Spring
Spring含义服务器端采用的3层体系结构
- 表示层(Web):在该层提供了Struts等框架的整合
- 业务逻辑层(Service):在该层可以管理事务、记录日志等
- 持久层(Dao):在该层可以整合Hibernate、JdbcTemplate等技术
Spring框架的优点
- Spring具有简单、可测试、松耦合等特点
Spring框架的7大优点
- 1、非侵入式设计
- 2、方便解耦、简化开发
- 3、支持AOP
- 4、支持声明式事务处理
- 5、方便程序测试
- 6、方便集成各种优秀框架
- 7、降低Java EE API的使用难度
Spring的体系结构
- Spring框架采用的是分层结构,它一系列的功能要素被分成20个模块,20个模块又被分成4个部分
- 1、Core Container(核心模块)
Core Container
(1)Beans:提供了BeanFactory,Spring将管理对象称Bean
(2)Core:提供了Spring框架的基本组成部分,包括IoC和DI功能
(3)Context:建立在Core和Bean模块的基础之上,是访问定义和配置的任何对象的媒介
(4)SpEL:Spring3.0后新增的模块,是运行时查询和操作对象图的强大的表达式语言 - 2、Data Access/Integration(数据访问/集成)
Data Access
(1)JDBC:提供了JDBC的抽象层,大幅度减少了在开发过程中对数据库操作的编码
(2)ORM:对流行的对象关系映射API,包括JPA、JDO、Hibernate提供了集成层支持
(3)OXM:提供了一个支持对象/XML映射的抽象层实现,如JAXB、Castor、XMLBeans、JiBx、XStream
(4)JMS:指Java消息传递服务,包含使用和产生信息的特性
(5)Transactions:支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理- 3、Web
(1)Servlet:也称Spring-webmvc模块,包含Spring模型-视图-控制器(MVC)和REST Web Services实现的Web程序
(2)Web:提供了基本的Web开发集成特性,如:多文件上传、使用Servlet监听器来初始化IoC容器以及Web应用上下文
(3)Portlet:提供了在Portlet环境中使用MVC实现,类似Servlet模块的功能
(2)WebSocket:提供WebSocket和SockJS的实现,以及对STOMP的支持 - 4、其他模块
(1)AOP:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性
(2)Aspects:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的面向切面编程(AOP)框架
(3)Instrumentation:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用
(4)Messaging:Spring 4.0后增加的模块,提供了对消息传递体系结构和协议的支持
(4)Test:提供了对单元测试和集成测试的支持
- 3、Web
Spring的核心容器
Spring提供了的2种核心容器
-
BeanFactory
- 作用:BeanFactory就是一个管理Bean的工厂,主要负责初始化各种Bean,并调用它们的生命周期方法
-
创建BeanFactory实例时,需要提供Spring所管理容器的详细配置信息,这些信息通常采用XML文件
形式来管理
-
ApplicationContext
- 是BeanFactory的子接口。包含BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持。创建ApplicationContext接口实例,通采用2种方法:
(1)通过ClassPathXmlApplicationContext创建(最常用)
(2)通过FileSystemXmlApplicationContext创建
Spring获取Bean的实例通常采用2种方法
获取Bean的实例依赖注入(DI)概念
-
与控制反转(IoC)含义相同
概念
依赖注入的实现方式
属性setter方法实现依赖注入
-
指IoC容器使用setter方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter方法的依赖注入
构造方法实现依赖注入
- 指IoC容器使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个依赖
Bean的生命周期
① Spring IoC容器找到关于Bean的定义并实例化该Bean。
② Spring IoC容器对Bean进行依赖注入。
③ 如果Bean实现了BeanNameAware接口,则将该Bean的id传给setBeanName方法。
④ 如果Bean实现了BeanFactoryAware接口,则将BeanFactory对象传给setBeanFactory方法。
⑤ 如果Bean实现了BeanPostProcessor接口,则调用其postProcessBeforeInitialization方法。
⑥ 如果Bean实现了InitializingBean接口,则调用其afterPropertySet方法。
⑦ 如果有和Bean关联的BeanPostProcessors对象,则这些对象的postProcessAfterInitialization方法被调用。
⑧ 当销毁Bean实例时,如果Bean实现了DisposableBean接口,则调用其destroy方法。
网友评论