“前人栽树,后人乘凉”,搞Java的,不知道模式,那这人绝对还未入流。但经常是写了这么多代码,看看才发现,原来前人早就总结过了,自己满头大汗的栽了棵树苗,蓦然回首,擦,远方已经有棵大树鸟。
就拿这个模式来说,名字挺吓人的,其实估计搞过Java(或者被搞)的大概都会用过,业务场景是,对于输入输出流,JDBC连接等资源,一般的处理方式是谁开启的就由谁负责关闭资源,其中必然涉及对于异常的处理,而如果这个资源不仅仅是当前对象要用,还可能传递给别的对象使用的话,一般的做法就是。。。不说废话了,贴代码吧:
public void useResource(ResourceUser user){ Resource resource = null; try{ user.use(resource.open()); } catch (Exception e){ user.onError(e); } finally{ if (resource != null){ try{ resource.close(); } catch (Exception e){ user.onError(e); } } } }
其它的资源使用者直接在use()方法里面做自己的相关业务就行了。
这种处理方式学名就叫Execute Around Method,其实不光资源处理是这种方式,稍微扩展一下会发现,什么AOP、动态代理的处理也是这种方式。
“一开始没有模式,起了个名字就是模式”。。。
相关推荐
- **执行环绕方法(Execute Around Method)**:在执行特定操作前后添加额外的行为。 - **调试打印方法(Debug Printing Method)**:帮助开发者在调试过程中更好地理解对象的状态。 ##### 消息(Messages) - **消息...
通过在切面类上定义`@Aspect`,在方法上定义`@Before`, `@After`, `@Around`等注解,可以轻松地定义切点和通知。以下是一个Spring注解AOP的例子: ```java import org.aspectj.lang.annotation.Aspect; import org....
<around method="Execute*" advice="MyNamespace.MyAdvice, MyAssembly"/> ``` - **代码注解**:使用特性(Attribute)在类或方法上标记切面应用。 ```csharp [ interceptions ] public class MyComponent...
logger.info("请求结束,方法:{},执行时间:{}ms", methodName, executeTime); } catch (Throwable e) { // 记录异常信息 logger.error("请求异常,方法:{},异常:{}", methodName, e.getMessage()); result = ...
Instead, LLDB will generate a synthetic name for a method it recognizes as a method, but doesn’t know what to call it. In this chapter, you’ll build an LLDB script that will resymbolicate stripped ...
<aop:around method="aroundAdvice" pointcut-ref="executionPointcut"/> ``` ```java public class MyAspect { public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable { System.out....
System.out.println("Method " + joinPoint.getSignature() + " is about to execute."); } } ``` 然后,我们来看看XML配置实现AOP: 1. **XML配置实现AOP** 在Spring的配置文件中,我们可以创建`<aop:config>`...
} // 后置通知,在方法正常执行后调用 @After("pointCut()") public void after() { System.out.println("after method execute..."); } // 异常通知,在方法抛出异常后调用 @AfterThrowing(pointcut = "pointCut()...
Object-oriented programming (OOP) is a paradigm that organizes code around objects and data, rather than actions and logic. - **Classes:** Classes define blueprints for objects. They specify the ...
This is believed to be a bug in the Windows clipboard and a work around hasn't been found yet. * Asynchronous targets appears to be broken in the current release. * When TDropFileTarget....
<aop:around method="execute" pointcut-ref="adviceAspectPoint" arg-names="Aspect" /> id="adviceAspect" class="com.aspect.AdviceAspect"> name="rootKey" value="aspect.cache."/> ...
(execute any AML debugger command) (Valery Podrezov). ---------------------------------------- 12 September 2006. Summary of changes for version 20060912: 1) ACPI CA Core Subsystem: Enhanced the ...
- **通知(Advice)**:通知是在特定连接点执行的行为,比如前通知(Before)、后通知(After)和环绕通知(Around)。 - **连接点(Join Point)**:连接点是在程序执行过程中可以插入通知的特定点,通常是方法...
Work with classes, method calls, inheritance, and overriding. Chapter 12, Objects with Data Add per-instance data, including constructors, getters, and setters. Chapter 13, Object Destruction Add ...
- **Closures**: Groovy supports closures, which are anonymous functions that can be passed around as values. Closures are useful for implementing callbacks, event handlers, and functional programming ...
C# is an object-oriented programming (OOP) language, which means that it structures code around objects rather than actions and data instead of logic. Object orientation provides several key benefits,...
- **Java反射机制**:Spring框架的IoC容器使用了大量的Java反射机制,这包括`Class`、`Field`、`Method`和`Constructor`等类,以实现在运行时创建新类、调用方法等功能。 - **EL表达式与OGNL的区别**:EL表达式可以...
Once composer is installed, execute the following command in your project root to install this library: ```sh composer require google/apiclient:"^2.0" ``` Finally, be sure to include the autoloader:...
JavaCV also comes with hardware accelerated full-screen image display (CanvasFrame and GLCanvasFrame), easy-to-use methods to execute code in parallel on multiple cores (Parallel), user-friendly ...
It is handy in studying database programming.<END><br>20 , MySQLExplorer.zip Explorer for MySQL Data Base.You can retrieve and execute your query. <END><br>21 , ICDBaseSource115.zip DAO based ...