Spring总结

Spring包含哪些模块?

  • spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
  • spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
  • spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。
  • spring jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC。
  • spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。
  • spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。
  • spring test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。

IOC

IOC:控制反转
是指将创建对象的控制权转移给Spring容器,并由Spring容器来管理对象与对象之间依赖关系,实现了对象与对象之间的关系的松耦合

Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期

核心:bean工厂,抽象工厂模式

抽象工厂模式解析:

  • an工厂:提供了bean的创建功能,提供了对bean生命周期的管理,管理了bean与bean之间的依赖关系
  • 整合其他框架,在配置文件中配置其他框架对象需要的参数就可以使用,不需要关心其具体如何创建(如一些对象的创建需要先实例化其他对象)
  • 自己编码时,可以更好的面向接口编程,因为接口的实现类交由spring注入,接口的调用者不需要关心实现类的具体,后续实现类的逻辑修改时,接口调用者不需要改代码

AOP

AOP:面向切面编程
针对一些多个地方会用到的公共的行为和逻辑,抽取并封装为一个可重用的模块,并使用动态代理技术,使用反射创建目标类的代理类,在执行目标类方法的前后,可执行织入进去的切面逻辑

优点:
减少系统中的重复代码,提高了代码的可维护性
用于事务处理、日志记录、权限认证等

注意点:
Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能
Spring对接受容器管理的全部的bean,默认采用单例模式管理

AOP中的名词:

BeanFactory 和 ApplicationContext有什么区别?

  • BeanFactory是Spring最底层的容器接口,定义了Bean工厂的很多基础功能,如读取bean配置文档,管理bean的加载,管理bean的声明周期,维护bean之间的依赖关系。
  • ApplicationContext继承了BeanFactory,并提供了一些扩展功能,如支持国际化、提供在监听器中注册bean事件等
  • 应用场合我们一般直接使用ApplicationContext

获取ApplicationContext,手动获取Bean

1、实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
Spring初始化时,会通过该方法将ApplicationContext对象注入。

2、通过Spring提供的工具类获取ApplicationContext对象

// Spring中获取ServletContext对象,普通类中可以这样获取
ServletContext sc = ContextLoader.getCurrentWebApplicationContext().getServletContext();
 
// servlet中可以这样获取,方法比较多
ServletContext sc = request.getServletContext():
ServletContext sc = servletConfig.getServletContext();  //servletConfig可以在servlet的init(ServletConfig config)方法中获取得到
 
 
/* 需要传入一个参数ServletContext对象, 获取方法在上面 */
// 这种方法 获取失败时抛出异常
ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
// 这种方法 获取失败时返回null
ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sc);

3、继承抽象类ApplicationObjectSupport
说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
4、继承自抽象类WebApplicationObjectSupport
说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
5、在初始化时保存ApplicationContext对象

1 ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); 2 ac.getBean("beanId");

Spring 框架中都用到了哪些设计模式?

  1. 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
  2. 单例模式:Bean默认为单例模式。
  3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
  4. 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
  5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。
  6. 责任链模式:SpringMVC拦截器的实现

你可能感兴趣的:(java)