50行代码实现Java方法代理

工作中经常需要对现有程序进行一些扩展,而不想修改现有代码。可以使用代理方法,常使用的代理技术有JDK的java.lang.reflect.Proxy、spring的代理等.

例如对方法加事务,就常用org.springframework.transaction.interceptor.TransactionInterceptor。他就是在现有方法前面开启事务,后面关闭事务。

本文以spring+aspectj做一个简单的例子:
1.使用maven依赖的文件如下:
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>           
        </dependency>   
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>           
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>           
        </dependency>       
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.4</version>
        </dependency>
2.以需要在指定方法前面执行一段代码为例:
public class BoforeAspect {
    public void before(){
        System.out.println("before method do something....");
    }
}
3.配置spring
    <bean id="testInterceptor" class="net.highersoft.spring.TestInterceptor" />     
    <bean id="boforeAspect" class="net.highersoft.spring.BoforeAspect" ></bean>
    <aop:config proxy-target-class="true"> 
        <aop:aspect ref="boforeAspect"> 
            <aop:before method="before" pointcut="execution(* net.highersoft.spring.*.*(..))"/> 
        </aop:aspect> 
    </aop:config>
4.写测试程序
public class TestInterceptor {
    public static void main(String[] args) {
        ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:test.xml");
        TestInterceptor us = (TestInterceptor) ctx.getBean("testInterceptor");
        us.printUser("程忠");
    }
    public void printUser(String user) {
        System.out.println("printUser user:" + user);
    }
}
哈,总共不到50行代码,搞定。

时间: 2024-11-05 12:18:52

50行代码实现Java方法代理的相关文章

50行代码实现缓存,JAVA内存模型原理

遇见这样的高人怎么办??下面是一个简单缓存的实现,相当牛叉!自己看吧,只有50行代码. 摘自:http://www.oschina.net/code/snippet_55577_3887 import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; import java.util.

HTML5游戏实战(1):50行代码实现正面跑酷游戏

前段时间看到一个"熊来了"的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法. 0.先Show一下最终成果: 在线运行:http://gamebuilder.duapp.com/apprun.php?appid=ZecSmA0UGRTh9juSEmu8RjkK-41416104149375 在线编辑:http://gamebuilder.duapp.com/gamebuilder.php?appid=

Python 50行代码实现代理服务器(加强版)

网上很多python 50行代码实现代理服务器,但是易出现异常,导致退出. 这里的代理服务器,是指二级代理服务器.比如:A可以访问B,B可以访问C,A不能直接访问C.这时,如果在B开一个二级代理,就可实现A访问C.现有的工具有CCProxy. 这里就是使用Python简单的实现一个二级代理. #coding=utf-8 import socket import select import sys import threading import time import logging import

python爬虫实战:利用scrapy,短短50行代码下载整站短视频

近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题. 因为这个事儿,勾起了我另一个念头,这不最近一直想把python爬虫方面的知识梳理梳理吗,干脆借机行事,正凑着短视频火热的势头,做一个短视频的爬虫好了,中间用到什么知识就理一理. 我喜欢把事情说得很直白,如果恰好有初入门的朋友想了解爬虫的技术,可以将就看看,或许对你的认识会有提升.如果有高手路过,

Android C代码回调java方法

本文将讲述下列三种C代码回调java方法 1.c代码回调java空方法 2.c代码回调java int类型参数方法 3.c代码回调javaString类型参数方法 方法都差不多,先看c代码回调java空方法,其他两种类似: ① 找到字节码对象 //jclass (*FindClass)(JNIEnv*, const char*); //第二个参数 要回调的java方法所在的类的路径 "com/itheima/callbackjava/JNI" ② 通过字节码对象找到方法对象 //jme

[Lua]50行代码的解释器,用来演示lambda calculus

嗯,来写写经过: 在知乎上看见用Belleve牛用javascript写了一个精简的lisp解释器 => 我也想写一个,用lua写,能多简单呢? => 写了一个阉割的scheme解释器,包含lambda/if两个special form,以及+-=print几个过程,60行代码 => 能再精简吗?比如把if给去掉? => 搜索,嗯,lambda calculus能帮我 => 阅读wiki上lambda calculus的"Encoding datatypes&quo

基于requirejs+bluebird,50行代码实现轻巧实用的前端CMD加载器

首先是github地址,可以用git克隆命令也可以直接在git页面下载 https://github.com/kazetotori/js-requireAsync 下载下来后目录结构是这样的 -package.json -index.js -node_modules --bluebird --jquery --requirejs requireAsync函数 requireAsync函数是index.js里定义的一个全局函数,该函数接受无限多个字符串参数,参数为需要加载的模块名或模块路径,路径不

Python黑科技:50行代码运用Python+OpenCV实现人脸追踪+详细教程+快速入门+图像识

嗨,我最亲爱的伙计们,很高兴我们又见面了. 首先先感谢朋友们的关注.当然我更希望认识与计算机相关的领域的朋友咱们一起探讨交流.重点说一下,我是真人,不是那些扒文章的自媒体组织,大家可以相互交流的! 本篇文章我们来讲一下关于AI相关的人脸追踪,人脸识别相关的一些知识.当然本篇教程为(上)部分,讲一下利用python+opencv来实现人脸识别与追踪,明后天出(下)部分,用python来通过指纹对比实现人脸验证.人脸解锁(大家感兴趣的可以提前关注哦). 这两节课呢,代码量都不是很多,鄙人尽量多注释点

【实现方法2】50行代码实现小程序状态管理,及其监听

 0.前言 以下代码写在.ts文件里面,其实改成 .js 一样能运行.请淡定. 1.监听 // 这个是“监听”的用法 // 所有除了app.js以外的文件 //如 xxx.component.js 或 xxx.page.js const app = getApp( ); app.watch$('Auth.names.Ben', ( newVal, oldVal ) => { //..... }) 2.Store结构 3.最后一步(app.ts) import { store$ } from '.