我的控制反转,依赖注入和面向切面编程的理解
public class class A{
B b;
public A(){
b = new B();
}
void func(){
b.func();
}
}
- 问题1:如果现在要改变 类 B 生成方式,如需要用new B(String name)初始化 B,需要修改 类A中的源代码;
- 问题2:如果想测试不同 B 对象对 A 的影响很困难,因为 B 的初始化被写死在了 A 的构造函数中;
- 问题3:如果要对类B的实例进行调试时,就必须在类A中对类B的实例进行测试,增加了测试难度和复杂度;因为当出现问题时,不知道 是 类A的问题 还是 类B的问题;
public class class A{
B b;
public A(B b){
this.b = b;
}
void func(){
b.func();
}
}
public class BankAccountDAO {public void withdraw(double amount) {long startTime = System.currentTimeMillis();try {// Actual method body...}finally {long endTime = System.currentTimeMillis() - startTime;System.out.println("withdraw took: " + endTime);}}
}
- 打开和关闭指标是非常困难的,因为您必须手动将try> / finally块中的代码添加到要基准的每个方法或构造函数。
- 分析代码真的不属于你的应用程序代码。 它使你的代码膨胀和更难读,因为你必须在一个try / finally块中包含时间。
- 如果要扩展此功能以包括方法或失败计数,或者甚至将这些统计信息注册到更复杂的报告机制,则必须再次修改许多不同的文件。
public class Metrics implements org.jboss.aop.Interceptor
03. public Object invoke(Invocation invocation) throws Throwable {
05. long startTime = System.currentTimeMillis();
06. try {
08. return invocation.invokeNext();
09. }
10. finally {
12. long endTime = System.currentTimeMillis() - startTime;
13. java.lang.reflect.Method m = ((MethodInvocation)invocation).method;
14. System.out.println("method " + m.toString() + " time: " + endTime + "ms");
15. }
16. }
17. }
- 在JBoss AOP下,Metrics类包装withdraw():当调用代码调用withdraw()时,AOP框架将方法调用分解为其部分,并将这些部分封装到一个调用对象中。 然后框架调用位于调用代码和实际方法体之间的任何方面。
- 当AOP框架解析方法调用时,它在第3行调用Metric的invoke方法。第8行包装并委托给实际的方法,并使用一个封闭的try / finally块来执行定时。 第13行从调用对象获取有关方法调用的上下文信息,而第14行显示方法名称和计算的度量。
- 将度量代码放在其自己的对象中允许我们以后轻松扩展和捕获额外的测量。现在,度量被封装到一个方面,让我们看看如何应用它。
public class BankAccountDAO {public void withdraw(double amount) {long startTime = System.currentTimeMillis();try {// Actual method body...}finally {long endTime = System.currentTimeMillis() - startTime;System.out.println("withdraw took: " + endTime);}}
}
public class Metrics implements org.jboss.aop.Interceptorpublic Object invoke(Invocation invocation) throws Throwable {long startTime = System.currentTimeMillis();try {return invocation.invokeNext(); // 调用真正的实体方法}finally {long endTime = System.currentTimeMillis() - startTime;java.lang.reflect.Method m = ((MethodInvocation)invocation).method;System.out.println("method " + m.toString() + " time: " + endTime + "ms");}}}
我的控制反转,依赖注入和面向切面编程的理解相关推荐
- 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程...
那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰--依赖倒置•控制反转•依赖注入•面向接口编程.也 ...
- Spring 的控制反转/依赖注入
第一章 Spring 的控制反转/依赖注入 回顾 增删改查. 课前测: 本章内容 spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制.工厂模式 BeanFactory: 懒 ...
- Spring框架学习笔记(1) ---[spring框架概念 , 初步上手使用Spring , 控制反转 依赖注入初步理解 ]
spring官网 -->spring官网 spring5.3.12–>spring-framework 在线文档 --> Spring 5.3.12 文章目录 1.Spring概论 ...
- Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面
初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...
- Spring Framework基础知识:依赖注入与面向切面
<Spring in Action>是一本很不错的Spring工具书,作者Craig Walls是Spring核心开发人员,特别喜欢用有趣的例子减少读者对枯燥理论和恐怖名词的畏惧感.受到他 ...
- 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
今天,我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些"高深术语"中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. 高聚合·低耦合 简短:管理好自己(内聚),但是有 ...
- 【转】那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
作者:在好 链接:https://www.zhihu.com/question/31021366/answer/102239756 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 控制反转---依赖注入理解
在学习Spring的时候,意外找到这个控制反转(IoC)和面向切面(AOP)的容器框架之前,我们先来看一下什么是控制反转(IoC). 控制反转(Ioc)和依赖注入(DI)刚听到感到很难理解,平时也程序 ...
- 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程【转】...
那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰.也许时至今日,你仍对它们一知半解.不过就在今天, ...
最新文章
- #Node.js的fs导入遇到的问题和解决方案
- new LayoutParams 使用
- python图像处理opencv_使用Python+OpenCV进行图像处理(二)| 视觉入门
- 考研C++必刷题(一)
- java客户端_Java常用的Http client客户端
- pandas 索引去重_Pandas 同元素多列去重的实例
- VS2013解决error LNK2019: 无法解析的外部符号 mfcs120ud.lib
- 栈应用---元素出栈、入栈顺序的合法性判断
- ServletResponse的常用方法:getWriter,setContentType
- 谷歌验证码(Recaptcha)对接教程
- mtk刷机工具sp flash tool_qpst刷机(翻到高中刷机时的记录,想来qpst对现在玩机的人也有用吧...
- Spotfire 对 列 数据进行自定义排序
- 微信桌面版如何同时登陆两个微信账号
- 无法访问共享计算机文件,电脑无法访问共享文件怎么解决?
- Windows10电脑进行拨号连接时,无法共享热点?如何解决?多次尝试后,终于解决了。
- 2022智源大会议程公开 | 探索智能的原理,构建脑科学与AI的桥梁
- HAL库配置F407ZE DDS AD9854
- PMP证书怎么续证?PDU要怎么获得?超过有效期证书就作废了吗?
- python 使用grpc
- 3.8关于向WorldWind地球模型添加图层