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拦截器的实现
发表回复