spring简介之不求甚解
Posted jung285175400
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring简介之不求甚解相关的知识,希望对你有一定的参考价值。
1. Spring框架的功能
-
清理:Spring是轻量级的,基本的版本大小为2MB
-
控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
-
面向切面的编程AOP:Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
-
容器:Spring包含并管理应用中对象的生命周期和配置
-
MVC框架: Spring-MVC
-
事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务JTA
-
异常处理:Spring提供方便的API把具体技术相关的异常
2. Spring的七大模块
-
Spring Core: 核心容器提供 Spring 框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
-
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
-
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
-
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
-
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
-
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
-
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
3. Spring容器
Sping的容器可以分为两种类型:
-
BeanFactory:(org.springframework.beans.factory.BeanFactory接口定义)是最简答的容器,提供了基本的DI支持。最常用的BeanFactory实现就是XmlBeanFactory类,它根据XML文件中的定义加载beans,该容器从XML文件读取配置元数据并用它去创建一个完全配置的系统或应用。
-
ApplicationContext应用上下文:(org.springframework.context.ApplicationContext)基于BeanFactory之上构建,并提供面向应用的服务。
4. ApplicationContext通常的实现
-
ClassPathXmlApplicationContext:从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源。
-
FileSystemXmlApplicationContext:读取文件系统下的XML配置文件并加载上下文定义。
-
XmlWebApplicationContext:读取Web应用下的XML配置文件并装载上下文定义。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
5. IOC & DI
Inversion of Control, 一般分为两种类型:依赖注入DI(Dependency Injection)和依赖查找(Dependency Lookup).依赖注入应用比较广泛。
Spring IOC扶着创建对象,管理对象(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。
优点:把应用的代码量降到最低。容器测试,最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。
DI依赖注入是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用床架对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务,但是要在配置文件里描述组件需要哪些服务,之后一个IOC容器辅助把他们组装起来。
IOC的注入方式:1. 构造器依赖注入;2. Setter方法注入。
6. 如何给spring容器提供配置元数据
XML配置文件
基于注解的配置
基于Java的配置@Configuration, @Bean
7. bean标签中的属性:
id
name
class
init-method:Bean实例化后会立刻调用的方法
destory-method:Bean从容器移除和销毁前,会调用的方法
factory-method:运行我们调用一个指定的静态方法,从而代替构造方法来创建一个类的实例。
scope:Bean的作用域,包括singleton(默认),prototype(每次调用都创建一个实例), request,session, global-session(注意spring中的单例bean不是线程安全的)
autowired:自动装配 byName, byType, constructor, autodetect(首先阐释使用constructor自动装配,如果没有发现与构造器相匹配的Bean时,Spring将尝试使用byType自动装配)
8. beans标签中相关属性
default-init-method
default-destory-method
default-autowire:默认为none,应用于Spring配置文件中的所有Bean,注意这里不是指Spring应用上下文,因为你可以定义多个配置文件
9. Bean的生命周期
Bean的构造
调用setXXX()方法设置Bean的属性
调用BeanNameAware的setBeanName()
调用BeanFactoryAware的setBeanFactory()方法
调用BeanPostProcessor的postProcessBeforeInitialization()方法
调用InitializingBean的afterPropertiesSet()方法
调用自定义的初始化方法
调用BeanPostProcessor类的postProcessAfterInitialization()方法
调用DisposableBean的destroy()方法
调用自定义的销毁方法
10. Spring中注入集合
允许值相同
不允许值相同
键和值都可以为任意类型,key, key-ref, value-ref, value可以任意搭配
XXX键和值都只能是String类型
11. 装配空值
<property name="xxx"><null/></property>
12. 自动装配(autowiring)
有助于减少甚至消除配置和元素,让Spring自动识别如何装配Bean的依赖关系。<context:annotation-config/>
与之对应的是:自动检测(autodiscovery),比自动装配更近了一步,让Spring能够自动识别哪些类需要被配置成SpringBean,从而减少对元素的使用。<context:component-scan>
13. 注解
Spring容器默认禁用注解装配。最简单的开启方式<context:annotation-config/>。
Spring支持的几种不同的用于自动装配的注解:
Spring自带的@Autowired注解
JSR-330的@Inject注解
JSR-250的@Resource注解
14. @Autowired
@Autowired具有强契约特征,其所标注的属性或参数必须是可装配的。如果没有Bean可以装配到@Autowired所标注的属性或参数中,自动装配就会失败,抛出NoSuchBeanDefinitionException.
属性不一定非要装配,null值也是可以接受的。在这种场景下可以通过设置@Autowired的required属性为false来配置自动装配是可选的,如:
@Autowired(required=false)
private Object obj;
注意required属性可以用于@Autowired注解所使用的任意
以上是关于spring简介之不求甚解的主要内容,如果未能解决你的问题,请参考以下文章
今天说一下Spring的架构模块!让这个12岁的年轻人为你讲解