前言
在 上篇 实现了 判断一个类的方式是符合配置的 pointcut 表达式
、根据一个 Bean 的名称和方法名,获取 Method 对象
、实现了 BeforeAdvice、AfterReturningAdvice 以及 AfterThrowingAdvice并按照指定次序调用
等功能,这篇再来看看剩下的 代理对象如何生成、根据 XML 配置文件生成 BeanDefintion以及如何将生成的代理对象放入到容器中 等功能,话不多说,下面进入主题。
前面两篇 如何实现 AOP(上)、如何实现 AOP(中) 做了一些 AOP
的核心基础知识简要介绍,本文进入到了实战环节了,去实现一个基于 XML
配置的简易版 AOP
,虽然是简易版的但是麻雀虽小五脏俱全
,一些核心的功能都会实现,通过实现这个简易版的 AOP
,相信你会对 AOP
会有更加深入的理解,不止知其然,还能知其所以然。AOP
的顶层接口规范和底层依赖基础组件都是由一个叫 AOP Alliance 的组织制定的,我们经常听到的 AspectJ
、ASM
、CGLIB
就是其中被管理的一些项目,需要明确的一点是,在 Spring
中只是使用了 AspectJ
的核心概念和核心类,并不是像 AspectJ
那样在编译期实现的 AOP
,而是在运行期。话不多说,下面开始进入主题。
在上篇 如何实现 AOP(上) 介绍了 AOP
技术出现的原因和一些重要的概念,在我们自己实现之前有必要先了解一下 AOP
底层到底是如何运作的,所以这篇再来看看 AOP
实现所依赖的一些核心基础技术。AOP
是使用动态代理
和字节码生成技术
来实现的,在运行期(注意:不是编译期!)为目标对象生成代理对象,然后将横切逻辑织入到生成的代理对象中,最后系统使用的是带有横切逻辑的代理对象,而不是被代理对象,由代理对象转发到被代理对象。
前面两篇文章(如何实现一个简易版的 Spring - 如何实现 Setter 注入、如何实现一个简易版的 Spring - 如何实现 Constructor 注入)介绍的都是基于 XML
配置文件方式的实现,从 JDK 5
版本开始 Java
引入了注解支持,带来了极大的便利,Sprinng
也从 2.5
版本开始支持注解方式,使用注解方式我们只需加上相应的注解即可,不再需要去编写繁琐的 XML
配置文件,深受广大 Java
编程人员的喜爱。接下来一起看看如何实现 Spring
框架中最常用的两个注解(@Component
、@Autowired
),由于涉及到的内容比较多,会分为两篇文章进行介绍,本文先来介绍上半部分 — 如何实现 @Component
注解。
之前在 上篇 提到过会实现一个简易版的 IoC
和 AOP
,今天它终于来了。。。相信对于使用 Java
开发语言的朋友们都使用过或者听说过 Spring
这个开发框架,绝大部分的企业级开发中都离不开它,通过 官网 可以了解到其生态非常庞大,针对不同方面的开发提供了一些解决方案,可以说 Spring
框架的诞生是对 Java
开发人员的一大福利,自 2004
年发布以来,Spring
为了解决一些企业开发中的痛点先后引入了很多的特性和功能,其中最重要的就是我们经常听到的 IoC
和 AOP
特性,由于涉及到的知识和细节比较多,会分为几篇文章来介绍,今天这篇(也是第一篇)我们来看看如何实现基于 XML
配置方式的 Setter 注入。