文章插图
- Spring AOP集成了AspectJ,AspectJ是Java中最为完整的AOP框架
- AspectJ是编译时增强
- AspectJ基于字节码操作Bytecode Manipluation实现
- AspectJ在切面较多的情况下要比Spring AOP的性能强很多
- Spring AOP是运行时增强
- Spring AOP基于代理Proxy实现
- Spring AOP中集成了AspectJ
- Spring AOP比较简单,在切面比较少的情况下和AspectJ的性能相似
- 模板方法模式: 是一种行为型模式,基于继承的代码复用 定义一个操作的算法骨架,将一些实现步骤延迟到子类中 模板方法使得子类可以不改变一个算法结构的情况下即可重新定义算法的某些特定步骤的实现方式
文章插图
- Spring中以Template结尾的类,比如jdbcTemplate等,都是使用了模板方法模式 通常情况下,都是使用继承来实现模板模式 在Spring中,使用了Callback与模板方法相结合的方式,既达到了代码复用的效果,又增加了系统的灵活性
- 观察者模式: 是一种对象行为模式 表示的是一种对象和对象之间具有依赖关系,当一个对象发生改变,依赖于这个对象的对象也会发生改变
- Spring事件驱动模型就是基于观察者模式实现的 Spring事件驱动模型可以在很多应用场景中解耦代码 比如每次添加商品时都需要更新商品索引,这时就可以使用观察者模式
- Spring事件驱动模型包含三种角色: 事件Event角色 事件监听者Listener角色 事件发布者Publisher角色
- ApplicationEvent: org.springframework.context 事件角色抽象类 继承java.util.Event并实现了java.io.Serializable接口
- Spring中默认存在以下事件,都是继承自ApplicationContext事件角色抽象类: ContextStartedEvent: ApplicationContext启动后触发的事件 ContextStoppedEvent: ApplicationContext停止后触发的事件 ContextRefreshedEvent: ApplicationContext初始化或者刷新后触发的事件 ContextClosedEvent: ApplicationContext关闭后触发的事件
文章插图
事件监听者角色Listener
- ApplicationListener: 事件监听者角色 ApplicationListener接口中定义了一个onApplicationEvent() 方法来处理ApplicationEvent. 只要实现onApplicationEvent() 方法即可完成监听事件
@FunctionalInterfacepublic interface ApplicationListener<E extends ApplicationEvent> extends EventListener { void onApplicationEvent(E event);}复制代码
事件发布者角色Publisher- ApplicationEventPublisher: 事件发布者角色 ApplicationEventPublisher接口中定义了publishEvent() 方法来发布事件,这个方法在AbstractApplicationContext中实现 在AbstractApplicationContext中,事件是通过ApplicationEventMulticaster广播的
@FunctionalInterfacepublic interface ApplicationEventPublisher { default void publishEvent(ApplicationEvent event) {publishEvent((Object) event); } void publishEvent(Object event);}复制代码
Spring事件流程- 定义一个事件: 实现一个继承自ApplicationEvent的事件类,并写出相应的构造函数
- 定义一个事件监听者: 实现ApplicationListener接口 重写onApplicationEvent() 方法
- 使用事件发布者发布消息: 使用ApplicationEventPublisher的publishEvent() 方法 重写publishEvent() 方法发布消息
- Spring事件模型示例
- 适配器模式: 是结构型模式,也是各种结构型模式的起源 将一个接口转换为调用方需要的接口 适配器使得接口不兼容的类之间可以一起工作.适配器又被称为包装器Wrapper
- Spring AOP中的增强和通知Advice使用了适配器模式,接口是AdvisorAdapter
- 常用的Advice类型包括: BeforeAdvice: 前置通知. 目标方法调用前增强 AfterAdvice: 后置通知. 目标方法调用后增强 AfterReturningAdvice: 目标方法执行结束之后 ,return之前
推荐阅读
- windows系统中毒,sql server数据库文件恢复抢救和OA程序文件恢复
- 大叶松针滇红茶,大叶滇红茶功效与作用
- python中下载jupyter notebook
- 香浓玉米忌廉汤
- 酿鱿鱼筒汤的做法
- 吃中药后多久能喝红茶,喝中药能喝的茶有哪些功效与作用是什么意思
- 诗经中的经典名句有哪些?
- 中国现代十大作家有哪些?
- “文房四宝”中的毛笔是谁发明的?
- 吃中药喝红茶有影响吗,喝中药能喝的茶有哪些功效与作用吗