With AOP, Component Oriented == Object Oriented

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
在本人之前的《 Component/Service Oriented Software System Development Thinking 》一文中,我将包括BinaryLevel和Source Code Level的软件模块统称为Component。这种分类方式,和传统的对Component的一般定义应该说并不是十分一致。本文就是要对我为什么要这样分类作一些补充解释。
 
-
 
传统的定义中,一般认为,Component Oriented和Object Oriented有本质区别,在O'Reilly的《 Programming .Net Component》一书中,列举了两者的主要区别和Component Oriented的基本原设计准则。没看过的读者可以下载下来看看,这里给的链接只包含该书了第一章,当然,这里说的区别和设计准则是包含在这一章里的。
 
区别:
1. Building Blocks Versus Monolithic Applications - 多程序集还是单一程序集
2. Interfaces Versus Inheritance - 黑盒还是白盒
 
设计准则:
1. Separation of cnterface and implementation
2. Binary compatibility
3. Language idependency
4. Location transparency
5. Concurrency management
6. Version Control
7. Component-based security
 
-
 
那么,我为何将这两个原本有区别,区别似乎还不是很小的概念归在一个统一的概念-“Component”中呢?
 
首先我们来谈谈,上面提到的两个主要区别。
 
原书的作者的主要观点是,组件总应该是语言无关的二进制级别的黑盒模型,而OO则一般是语言相关的源代码级别的白盒模型。接着又说到,组件的重用,一般是不去关心其内部细节,而以大颗粒的功能调用或类继承来使用;而OO则可以以细颗粒去继承,并且可以方便的通过设计模式的运用组合、拦截函数调用,插入代码、修改内部细节等等,类的继承,也可以是细颗粒的。因此,说两者有本质区别。
 
从作者考虑这个问题的角度,也是传统的组件定义的角度来说,以上的论点当然是不错的。但是, 有一项思想或者说技术的出现,很大程度上打破了以上的界限,是什么技术呢?您可能已经词到嘴边了,没错 ——AOP
 
-
 
关于AOP的基础思想介绍,我这里就不多说了,如果您还不是很了解,可以 在博客园站内搜索一下AOP。我这里要为您说明的是,为什么有了AOP的思想,以上这种CO和OO的界限和区别就大大减弱了呢?
 
当然这里我要特别提一下,我这里指的AOP,主要指有二进制级别织入能力的AOP,如Teddy所写的一个.Net下的AOP工具 AspectWeaver,而不仅仅是像Castle.Aspect#这样的基于DynamicProxy的AOP实现。
 
因为AOP的二进制级别的织入能力,更直白一点说,是AOP使得操作二进制级别的组件或者说程序集就和操作源代码级别的模块一样容易的能力,使得只要您愿意,就可以像有源代码的组件一样使用二进制的程序集。在二进制级别将一个程序集分解成多个程序集,或者多个程序集者病程一个程序集同样是轻而易举的。所谓黑盒还是白盒的区别,也就变得没有太大的意义了。现在都可以看作白盒。只要相应的源代码能够编译成相互兼容和可识别的二进制程序集,那么我们就能在二进制级别对程序模块进行任意的重用和改造。
 
当然,上面所列的组件化设计的基本原则,现在还是适用的。同时,这种二进制级别的细节操纵能力,使得AOP不但能够使用OO中所有可以使用的工具和设计思想,还是一个超集,可以做到许多超越OO限制的功能,如Mixin,接口实现,基类变更,静态代码拦截等等/插入/删除等等,感兴趣的朋友可以自查看相应的资料。
 
-
 
正是因为AOP的这种特殊能力,很大程度上破除了二进制组件和OO组件的界限,更将带来软件开发思想,可重用软件设计等的巨大变革,和很多以前实现不了的可能性变为现实。这样的变革的大致风貌我在之前的文章《 重新诠释AOP》中已有些许描述,在稍后的《Looking into Component》中,我也将会有进一步阐述。敬请期待!

spring之Aop组件 新手粗糙总结,如有赐教,洗耳恭听,谢谢大家指正!!!! 阅读详情

相关推荐

Spring AOP 事务

容器、AOP和事务

2404_88294688的博客 1581

Java:65-Spring实战以及AOP介绍

Spring实战以及AOP介绍 转账案例: 需求: 使用spring框架整合DBUtils技术,实现用户转账功能 基础功能: 步骤分析: /* 1. 创建java项目,导入坐标 2. 编写Account实体类 3. 编写AccountDao接口和实现类 4. 编写AccountService接口和实现类 5. 编写spring核心配置文件 6. 编写测试代码 */ 创建java项目,导入坐标: <dependencies> <dependency> <

qq_59609098的博客 1148

spring的AOP(Aspect Oriented Programming)面向切面编程

程序中需要有日志等需要,若在原本程序加代码会导致代码混乱,不宜维护,解决方法: 使用代理。 使用spring的AOP。 spring的AOP注解方式使用: 1.加入jar包(com.springsource.org.aopalliance,sapectj.weaver,spring-aop) 2.创建一个切面类(Aspect) ...

223

Spring aop 异常统一处理

为什么80%的码农都做不了架构师?>>> ...

weixin_33976072的博客 1734

Spring AOP 开发实践

本文摘要: Spring AOP开发实践详解: AOP是面向切面编程,通过横向抽取通用逻辑(如日志、事务)来补充OOP,实现不修改源码增强方法功能。 两种代理机制: JDK动态代理要求目标类实现接口,基于接口生成代理 CGLIB代理可代理无接口类,通过子类继承实现,但无法代理final类/方法 Spring默认按目标类是否有接口自动选择代理方式,高版本SpringBoot默认强制CGLIB 通过完整代码示例演示了两种代理的实现: JDK代理通过InvocationHandler拦截接口方法 CGLIB利用E

py_1990_04_20的博客 323

spring-aop入门之myAop

bean.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context=

Tomsheng321的专栏 363

IOC(DI), AOP 笔记

几个名词的简称:IOC(Inversion Of Control), DI(Dependency Injection), AOP(Aspect Orient Program), POJO(Persistent Of Java Object), DAO(Data Access Objectd) 什么是IOC(ID), 有什么好处:1. 把自己new的东西改为由容器提供(初始化具体值,装...

weixin_30741653的博客 79

Spring AOP控制权限

Model 就不给了,直接给业务逻辑。   beas.xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x...

iteye博客 168

Spring AOP 实现业务日志记录

1. 用户管理业务逻辑接口(UserManagerApplogic.Java ) Java代码   package com.iteye.applogic;      public interface UserManagerApplogic {       public void addUser(String name);   }     2.

技术学习与分享 2594

spring_由XML实现AOP面向切面编程_实现动态代理

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.s

辐_射的博客 478

Spring Boot实战:设计模式AOP实现游戏化能力绑定系统

在软件工程中,设计模式是解决常见问题的可复用方案,而面向切面编程(AOP)则用于处理横切关注点。模板方法模式定义了算法的骨架,允许子类重写特定步骤,策略模式则使算法可以相互替换。这些模式的核心价值在于提升代码的复用性、扩展性和维护性,广泛应用于构建灵活的业务流程和组件装配系统。结合依赖注入(DI)容器,如Spring Framework,可以实现运行时对象的动态绑定与组装。本文通过一个模拟“游戏角色开局绑定能力模板”的实战场景,具体展示了如何综合运用模板方法模式、策略模式和Spring AOP,构建一个可配

weixin_33910759的博客 487

Springboot之旅(一)-拦截器

官宣 从今天开始每天更新springboot基础知识,从基础到做项目,在这个过程中我会记录我的点滴,希望一起进步~ AOP是什么 Aop是一种切面思想,我感觉确切的说他不是一类技术而是一种思想,帮助我减少代码冗余 Aop功能 切点:找一个点击破 切面:对于某一方面去攻破 切面又分为前置拦截,后置拦截,运行之后拦截,还有很多种,不一一说了 Aop 代码举例 这次我们实现的是统一切割cont...

Judy-命中注定与众不同 292

java方法执行了2次

今天执行aop的前置通知发现这个方法执行了2次,其他的方法没有问题,然后发现在spring的xml得配置中,我配置了 [code="java"] [/code] 把这个配置,注解掉以后,方法就正常的执行一次了。 所以是配置的时候进行了2次拦截!!...

KingZhCool的专栏 1009

JAVA EE

RIA (Rich Internet Application,富互联网应用程序),将C/S丰富的事件和操作模式引入到Web应用中,结合Web应用的集中部署和高可维护性,成为下一代Web应用的标准模式。 在市场上流行的RIA技术主要有Adobe公司的Flex,Sun公司的Java

309

Spring系列——两万字长文教会你Spring (超详细!!!)

到此,我们学习完了 Spring 框架,包括: Spring 体系结构 Spring Bean Spring AOP Spring JDBC Spring 事务管理 写此文章是为了做个笔记,等以后自己忘记了可以回头快速上手。同时也分享给小伙伴们,希望我们都能越来越好,不会就学 B 站,不懂就问 AI,总好过自己两耳不闻窗外事的独自琢磨。 最后认识一下吧,笔者叫`北迁`,hhh~~。

weixin_63009611的博客 1162

SpringBootWeb - 事务&AOP

我们接着继续学习@Transactional注解当中的第二个属性propagation,这个属性是用来配置事务的传播行为的。什么是事务的传播行为呢?就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。例如:两个事务方法,一个A方法,一个B方法。在这两个方法上都添加了@Transactional注解,就代表这两个方法都具有事务,而在A方法当中又去调用了B方法。

weixin_45210565的博客 803

每周小记——Spring框架

本文解析了Spring框架的四大核心机制:工厂模式通过BeanFactory和ApplicationContext实现Bean生命周期管理,奠定IoC容器基础;控制反转与依赖注入将对象创建权移交容器,通过配置解耦组件,提升系统灵活性;面向切面编程基于代理模式(静态/JDK动态/CGLIB)实现横切关注点(如日志、事务)与业务逻辑分离,并总结了五种通知类型及其配置方法。文章系统阐述了Spring如何通过设计模式优化Java企业级开发,强化代码可维护性与模块化,凸显其在现代架构中的关键作用

weixin_57655687的博客 1545

Spring

Spring1.Spring是什么?有什么好处?2.IOC是什么?有什么好处?具体过程?3.DI是什么?4.IOC和DI的关系?5.bean标签的属性有哪些?6.IOC创建对象有哪几种方式?7.Spring是如何实现IOC的?也就是如何创建对象的? 1.Spring是什么?有什么好处? 概念: SPring是一个支持控制反转(IOC)和面向切面编程(AOP)的容器框架。 好处: 两降低>&...

weixin_43766298的博客 1万+

Java27:SPRING

声明式事务是指使用注解或者XML配置的方式来控制的事务的提交和回滚。开发者只需要添加配置即可,具体事务的实现由第三方框架实现,避免我们直接进行事务操作使用声明式事务可以将事务的控制和业务逻辑分离开来,提高代码的可读性和可维护性区别:编程式事务需要手动编写代码来管理事务而声明式事务可以通过配置文件或注解控制事务。

zzx_nihao的博客 1052
上一篇: Component/Service Oriented Software System Development Thinking
下一篇: 深度解析Asp.Net2.0中的Callback机制
teddyma
博客等级 码龄25年 5粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值