Spring了解
创建Spring的目的是用来替代更加重量级的企业级Java技术。
Spring的bean容器
1.1简化Java开发
spring的四种关键策略
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
这四种策略的目的是为了降低Java开发的复杂性。
POJO详解
Spring不会在POJO上有任何不合理的要求
public class HelloWorld{
public String hello(){
return "helloWorld";
}
}
这个代码没有任何地方显示他是一个spring组件,他是一个简单的POJO类。Spring的非侵入编程模型意味着这个类在Spring应用和非Spring应用中都可以发挥同样的作用
Spring赋予POJO魔力的方式之一就是通过DI来装配它们
依赖注入(DI)
使用依赖注入的目的:让代码变得非常简单且更容易理解和测试。代码之间的耦合度相对于之前的POJO更加低。而之前的JOPO代码都是属于紧耦合的。
依赖注入这么实现
- 构造器注入
- 属性注入
- 借口注入
Spring容器类型
- bean工厂
由org.springframework. beans.factory.eanFactory接口定义,他是最简单的容器,提供基本的DI 支持。 - 应用上下文
由org.springframework.context.ApplicationContext接口定义,他是基于BeanFactory构建,他提供应用框架服务,这种类型更加受欢迎。应用上下文
- AnnotationConfigApplicationContext: 从一个或多个基于Java的配置类中加载Spring应用上下文。
- AnnotationConfigWebApplicationContext: 从一个或多个基于Java的配置类中加载Spring Web应用上下文。
- ClassPathXmlApplicationContext: 从类路径下的一个或多个XML配置文件中加载上下文定义, 把应用上下文的定义文件作为类资源。
- FileSystemXmlapplicationcontext: 从文件系统下的一个或多个XML配置文件中加载上下文定义。
- XmlWebApplicationContext: 从Web应用下的一个或多个XML配置文件中加载上下文定义。
Bean的创建和加载
- Spring对bean进行实例化;
- Spring将值和bean的引用注入到bean对应的属性中;
- 如果bean实现了BeanNameAware接口, Spring将bean的ID传递给setBean-Name()方法;
- 如果bean实现了BeanFactoryAware接口, Spring将调用setBeanFactory()方法, 将BeanFactory容器实例传入;
- 如果bean实现了ApplicationContextAware接口, Spring将调用setApplicationContext()方法, 将bean所在的应用上下文的引用传入进来;
- 如果bean实现了BeanPostProcessor接口, Spring将调用它们的post-ProcessBeforeInitialization()方法;
- 如果bean实现了InitializingBean接口, Spring将调用它们的after-PropertiesSet()方法。 类似地, 如果bean使用initmethod声明了初始化方法, 该方法也会被调用;
- 如果bean实现了BeanPostProcessor接口, Spring将调用它们的post-ProcessAfterInitialization()方法;
- 此时, bean已经准备就绪, 可以被应用程序使用了, 它们将一直驻留在应用上下文中, 直到该应用上下文被销毁
10.如果bean实现了DisposableBean接口, Spring将调用它的destroy()接口方法。 同样, 如果bean使用destroy-method声明了销毁方法, 该方法也会被调用。
Spring的核心模块
Spring六大定义良好的模块
1、测试模块---Test
2、Spring核心容器---Beans、Core、Context、Expression、Context support
3、面向切面编程---AOP、Aspects
4、Instrumentation---Instrument、Instrument Tomcat
5、数据访问与集成---JDBC、ORM、OXM、JMS、Transaction、Messaging
6、Web与远程调用---Web、Web servlet、Web portlet、WebSocket
Spring 核心容器
容器是Spring框架最核心的部分, 它管理着Spring应用中bean的创建、配置和管理。
Spring AOP 模块
在AOP模块中, Spring对面向切面编程提供了丰富的支持。 这个模块是Spring应用系统中开发切面的基础。AOP可以帮助应用对象解耦。、
数据访问与集成
该模块使我们的数据库代码变得简单明了, 并且可以避免因为关闭数据库资源失败而引发的问题。
Web与远程调用
该模块还提供了多种构建与其他应用交互的远程调用方案;面向用户的Web应用。
Instrumentation
Spring的Instrumentation模块提供了为JVM添加代理(agent) 的功能,它为Tomcat提供了一个织入代理, 能够为Tomcat传递类文件, 就像这些文件是被类加载器加载的一样
测试模块
测试模块以致力于Spring应用的测试,Spring为使用JNDI、 Servlet和Portlet编写单元测试提供了一系列的mock对象实现。