spring aop 必须的包 及里面用到的东西_手把手教你spring的博客

05a9fa60c7421fe8b81af10fc05a1f25.gif195929b5747f0804d0e1a41f78d0384b.png

作者:开课吧醉寒
图文编辑:开三金

认识Spring

spring作为java开源世界的第一框架,Spring已经成为事实上的Java EE开发标准,Spring框架最根本的使命是简化Java开发,提高工作效率,开发者基本上只需要关注业务实现。

学习、研究、掌握Spring框架成为每一位Java开发人员的必备知识体系。

而阅读源码则是学习Spring的最好方式之一,阅读源码可以很好的学习到作者的优秀代码,以及开发者设计的思想,回想一下让自己这样设计能有这样的想法?

fcafa4dfa847ecd4b1be2bb38ab6ab2a.png

学习spring源码必要掌握的内功

架构的设计的七大设计原则

1.开闭原则

2.依赖倒置原则

3.单一职责原则

4.接口隔离原则

5.迪米特原则

6.里式替换原则

7.合成复用原则

学习设计原则可以帮我们写出更优雅的代码结构,再实际开发中很少会遵循设计原则,主要是考虑的因素太多,不能刻意追求完美。

fc3eba1938c585fa206a9bc95ae61c24.png

Spring中的设计模式有那些

1.工厂模式:只对结果负责

2.单例模式:保证自己是独一无二的

3.原型模式:一生万物

4.代理模式:找人办事

5.委派模式:包产到户,只关注结果

6.策略模式:过程不同,结果一样

7.模板模式:按规矩办事,可以有变通

8.适配器模式:兼容

9.装饰者模式:包装

10.观察者模式:你不动我不动,牵一发动全身。

以上是spring框架中常用的设计模式,掌握这些设计模式可以很好的写出看着另人舒服的代码。

5285d122cad6c341a4a6fdd84d3fee1f.png

Spring的设计初衷

为程序开发者提供一个一站式、轻量级的开发平台,这个平台不仅可以降低代码的开发难度、降低代码之间的耦合度还可以与第三方中间件更好、更便捷的结合。

通过IOC容器来管理POJO对象;通过依赖注入和面向接口松耦合;通过AOP,以动态、非侵入的方式来增强服务的功能。

IOC和AOP是Spring的核心部分,是最为底层的抽象。 

而他主要是通过:

面向 Bean(BOP)、依赖注入(DI)以及面向切面(AOP)这三种方式来达成的。

BOP

Spring 是面向 Bean 的编程(Bean Oriented Programming, BOP),Bean 在 Spring 中才是真正的 主角。

Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,Spring 中没有 Bean 也就没有 Spring 存在的意义。

Spring 提供了 IOC 容器通过配置文件或者注解的方式来管理对象之间的依赖关系。

依赖注入

Spring 设计的核心:

 org.springframework.beans 包(架构核心是 org.springframework.core 包),它的设计目标是与 JavaBean 组件一起使用。

这个包通常不是由用户直接使用,而是由服务器将 其用作其他多数功能的底层中介。

基础 BeanFactory 接口,它是工厂设计模式的实现, 允许通过名称创建和检索对象。

BeanFactory 也可以管理对象之间的关系。BeanFactory 最底层支持两个对象模型。 

单例:提供了具有特定名称的全局共享实例对象,可以在查询时对其进行检索。

Singleton 是默 认的也是最常用的对象模型。

原型:

确保每次检索都会创建单独的实例对象。

在每个用户都需要自己的对象时,采用原型模式。 

Bean 工厂的概念是 Spring 作为 IOC 容器的基础。

IOC 则将处理事情的责任从应用程序代码转移到 框架。

面向切面

Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。

应用对象只实现它们应该做的——完成业务逻辑——仅此而已。

它们并不负责其它的系统级关注点,例如日志或事务支持。

Spring架构

76f2af4b3adde2b716bc9e8b57924232.png

Spring数据访问和集成模块:

主要实现了包括Spring支持各种ORM框架,如JDBC Template、JPA、mybatis等的集成;

还包括了Spring集成Marshalling XML的处理模块;

以及对Spring包括声明式与编程式事务的支持。

Spring-Web模块:

主要实现了Spring对Web的支持,如SpringMvc、Webservice等的支持。

AOP和设备支持:

由spring-aop、spring-aspects和spring-instrument3个模块组成;

spring-aop是Spring的另一个核心模块,是AOP主要的实现模块。

作为继OOP后,对程序员影响最大 的编程思想之一,AOP极大地开拓了人们对于编程的思路。

在Spring中,他是以JVM的动态代理技术为 基础,然后设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等;

同时,Pointcut 接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入。

spring-aspects模块集成自AspectJ框架,主要是为SpringAOP提供多种AOP实现方法。

spring-instrument模块是基于JAVASE中的"java.lang.instrument"进行设计的;

应该算是AOP的一个支援模块,主要作用是在JVM启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP的功能。

在分类里,我把他分在了AOP模块下,在Spring官方文 档里对这个地方也有点含糊不清,这里是纯个人观点。

Spring核心模块:

主要组件是BeanFactory,创建JavaBean的工厂,使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

spring-messaging模块:

spring-messaging是从Spring4开始新加入的一个模块,主要职责是为Spring框架集成一些基础的报 文传送应用。

7bc6568b414aca2a16e8af5755b57482.png

在springbean容器当中 xmlbeanFactory继承自DefaultListableBeanFactory

而DefaultListableBeanFactory是整个bean加载的核心部分;

是spring加载并注册bean的默认实现 XmlBeanFactory中使用了自定义的XmlBeanDefinationReader 实现了个性化的BeanDefinationReader的读取;

类图中 DefaultListableBeanFactory 继承了AbstractAutowireCapableBeanFactory 并实现了ConfigurableListableBeanFactory 以及BeanDefinationRegistry接口

BeanFactory:

定义获取bean及bean的各种属性

SingletonBeanRegistry:

定义对单例的注册和获取

DefaultSingletonBeanRegistry (DSBR):

对接口SingletonBeanRegistry各种方法的实现

HierarchicalBeanFactory (HBF) :

继承BF,也就是在BF的基础上增加了对parentFactory的支持

FactoryBeanRegistrySupport:

在DefaultSingletonBeanRegistry的基础上增加了对FactoryBean的特殊处理

ConfigurableBeanFactory:

提供配置Factory的各种方法

ListableBeanFactory :

根据各种条件获取bean 的配置清单

AbstractBeanFactory:

综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能

AutowireCapableBeanFactory:

提供创建bean,自动注入,初始化以及应用bean的后置处理器AbstractAutowireCa-pableBeanFactory 

综合AbstractBe-anFactory 并对接口AutowireCapableBe-anFactory进行实现

BeanDefinationRegistry(BDR):

定义了对BD的各种增删该查操作

ConfigurableListableBeanFactory: 

BeanFactory(BF)配置清单,指定忽略类型以及接口等

DefaultListableBeanFactory:

综合上述所有功能,主要是对bean注册后的处理

spring的基础容器和高级容器

BeanFactory:

是Spring里面最低层的接口,提供了最简单的容器的功能,BeanFactory负责配置、创建、管理Bean,提供获取bean,是否包含bean,是否单例与原型,获取bean类型,bean 别名的方法

ApplicationContext:

应用上下文,ApplicationContext接口是由BeanFactory接口派生出来的,同样也是Spring更高级的容器;

ApplicationContext提供了更多的额外的功能,默认初始化所有的Singleton,支持国际化,资源访问,消息发送、响应机制,AOP。

559774f4a941bcca4398184e69c879e0.png

总结

本章节只是对spring的一个简单的介绍,看本章内容可以重点关注BeanFactory继承体系,了解BeanFactory的继承体系对spring的源码理解会有很大的帮助。

下一章节重点介绍的是怎么看源码,再源码里面进行断点测试,第一次怎么去看源码,应该从那里看。

991ddb52a39d8d0aa286e9825ddac9bf.png

扫码关注,领取Java学习图鉴

↓ ↓ ↓

f1fad1cb4b7f28b1857a665c2316e424.pngddf91f4fb4d2fbc3d44b8db369afc492.png8077090dd177ce78f8b776f0854d0bea.pngec48799f6a653d9cbdc1b1adfa43839f.png

你“在看”我吗?

df4704d24c2e119c47898c501a9d6812.png