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 框架中都用到了哪些设计模式?
- 工厂模式:BeanFactory 就是简略工厂模式的体现,用来创建对象的实例;
- 单例模式:Bean 默认为单例模式。
- 代理模式:Spring 的 AOP 性能用到了 JDK 的动静代理和 CGLIB 字节码生成技术;
- 模板办法:用来解决代码反复的问题。比方. RestTemplate, JmsTemplate, JpaTemplate。
- 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态产生扭转时,所有依赖于它的对象都会失去告诉被制动更新,如 Spring 中 listener 的实现–ApplicationListener。
- 责任链模式:SpringMVC 拦截器的实现