我的启蒙书籍是大一下学期从咸鱼买的《JavaWeb从入门到精通》(第二版),在这本书里我学了到了很多新技术。逛知乎偶然看到大家都在用Spring,就购买了《Spring实战》和《Spring Boot实战派》,开启了我的Spring学习之路。
我们上学期开了一门网络编程课,讲了servlet+jsp,不过那个老师就喜欢扯东扯西的讲一大堆无关紧要的东西,好家伙重点全跳过,我就索性就没听过了。所以jsp学的不好的同学无所谓,不过建议Servlet学习透彻些,毕竟现在的Java WEB都还是围绕着Servlet的,这些框架也都是封装的Servlet。
Spring是一个轻量级的容器框架,它的出现就是为了简化企业级的应用开发。
Spring的特点:
我个人的理解,侵入和非侵入是框架相对于代码而言的概念。
BeanWrapper:BeanWrapper接口是Spring底层常用的一个接口,是Spring IOC的核心接口之一,当Bean实例被创建出来后,就会被BeanWrapper包装起来,BeanWrapper可以设置和访问被包装对象的属性 值,可以简单理解为BeanWrapper是对Bean的包装。
BeanFactory:BeanFactory接口也是Spring底层常用的一个接口,是Spring IOC的核心接口之一,顾名思义BeanFactory就是一个生成和管理Bean的工厂。它的职责包括:实例化、定位、配置应用程序中的对象以及建立这些对象间的依赖关系。他有一个派生类ApplicationContext,它拥有BeanFactory的所有功能,并且更加面向框架,还有很多额外的功能。 它与BeanFactory最大的区别就是ApplicationContext在启动时就会实例化Bean,而BeanFactory只有在从容器中拿Bean时才会去实例化。
上图是Spring5的各个模块,大致可以分为6大模块,接下来就让我们逐个分析一下每个模块的作用:
我们可以看到它包含四个部件,分别是Beans、Core、Context和SpEL,让我们根据具体的jar来看看它们具体的功能吧:
AOP意为面向切面编程,是继OOP后另一具有巨大深远影响意义的编程思想,包括ProxyFactory代理工厂等组件。
Spring框架提供了IOC和AOP两大核心功能,即控制反转(Inversion of Control)和面向切面编程(Aspect Oriented Programming)。
接下来就让我们来好好认识一下这两个功能:
控制反转(Inversion of Control,IOC),是面向对象编程中的一种设计原则,可以用来降低代码的耦合度,实现对象之间的“解耦”。
让我们来看看IOC的原理:借助“第三方”的IOC容器来实现对象之间的解耦
如上图所示,IOC容器就像一个工厂一样可以生产和分配对象,让我们拿个具体的例子来看一下:现在有A、B两个类,A的功能依赖于B。
在传统设计模式中:当A的功能依赖于B时,我们一般会将B的实例对象传递给A,简单些的程序还好说,要是很复杂的程序,那么我们就很容易出错。
在使用控制反转后:我们只需在A类中声明需要B类,IOC容器就会自动将B类实例注入到A类中,实现解耦。这里不得不讲一下注入依赖(Dependency,DI)了,注入依赖是控制反转的一种实现方式,Spring框架也正是利用注入依赖来实现控制反转的,所以在Spring框架中控制反转有时也被称为控制依赖,通过注入依赖 Bean的创建、引用、销毁等控制权都交给框架处理,当我们要使用某个类时,容器会自动查询该类的实例,若容器中没有这个类的实例,则自动创建并保存在IOC容器中,再交给使用者;如果已存在,则直接获取该类的实例交给使用者。对于使用者而言,我们只需声明需要依赖的Bean即可被自动注入。
西瓜籽:“你一会说IOC是个设计模式,一会又说IOC容器,这到底是个啥?”
大西瓜:“呀呀呀!没讲明白呀,那我就来总结一下到底什么是IOC容器,以及它在Spring中的具体实现。”
IOC容器是Spring用来实现IOC的载体。我们知道在Spring中经常使用到映射,比如Model的查找,具体到数据结构就是Map,而我们的Spring IOC容器,实际上也是一个存放着各种对象的Map。
在spring-beans包中有一个BeanFactory接口,上面提到过它可以创建和管理Bean,其实就是为IOC容器提供了最基本的功能,而它也仅仅只是一个接口,它的派生类DefaultListableBeanFactory,才是一个真正可使用的beanfactory实现,在其内部还定义了BeanDefinition的Map。
初始化bean的信息会存在beanDefinitionMap中,而DefaultSingletonBeanRegistry类里的singletonObjects哈希表则保存了单例对象。
AOP即面向切面编程,在Spring中,AOP是以动态代理技术为基础,设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等,同时,以Pointcut接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以拓展相关的方法自定义横切面。使用AOP的思想,我们可以将非核心的业务功能定义为切面。分别独立开发核心功能和非核心功能,然后再将切面和核心业务功能组合在一起。
总结:面向切面编程就是指对某一层进行纵切,在这一层的切面上添加各种公用逻辑,最终的目标是去除冗余的代码,达到逻辑复用的目的。
continue
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有