- 浏览: 137525 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yaoweinan:
没有.....
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
马文涛:
我也发现这个问题了,你找到解决办法了吗?
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
coding1688:
博主辛苦了,也可以参考一下这篇文章:四步轻松搞定瀑布流布局ht ...
瀑布流布局个人实现 -
yaoweinan:
嘿嘿,那个只是最笨的办法,实际上是不行的,现在一般的都有sw ...
文件上传(无刷新,带进度条,带网速)下载完整 -
javazzu:
我为啥不行呢
文件上传(无刷新,带进度条,带网速)下载完整
java中动态代理,在实际应用中有着很大的作用,譬如在一些类似的操作之前进行某种逻辑处理,或者在操作之后进行记录操作日志 用java的代理给类似的操作抽象出相同的代理部分,不同的信息用注解之类的统一模板,会给应用带来很大方便。如下例中用注解来控制是否允许删除的小例子。
自定义注解@Scope
package my.service; import java.lang.annotation.Retention; /** * @author Lyon Yao * */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Scope { String value(); }
动态代理类,在类中根据注解判断是否执行
package my.aop; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import my.service.Scope; /** * 代理类 * @author Lyon Yao * */ public class ProxyFactory implements InvocationHandler{ private Object targetObject; public Object instanceProxy(Object object){ this.targetObject=object; return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),this.targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // return this.invoke(method, args); System.out.println("pa"); Class<?> [] parameterTypes=method.getParameterTypes(); Method tmp_m = this.targetObject.getClass().getMethod(method.getName(),parameterTypes ); Annotation[] anns=tmp_m.getAnnotations(); Object result=null; if(anns!=null&&anns.length>0){ for(int i=0;i<anns.length;i++){ Annotation ann=anns[i]; if(ann.annotationType().equals(Scope.class)){ Scope gen=(Scope) ann; String values=gen.value(); if(values==null){ return this.invoke(method, args); }else { if(values.equals("yes")){ return this.invoke(method, args); }else if(values.equals("not")){ return result; }else{ return this.invoke(method, args); } } }else{ return this.invoke(method, args); } } }else{ return this.invoke(method, args); } return result; } private Object invoke(Method method,Object agrs[]) throws Throwable{ return method.invoke(this.targetObject, agrs); } }
代理接口
package my.service; /** * 用户信息操作(接口) * @author Lyon Yao * */ public interface UerService { /** * 保存 */ public void save(String user); /** * 获取 * @return */ public String get(); /** * 删除 */ public void delete(); }
接口实现类
package my.service.impl; import my.service.Scope; import my.service.UerService; /** * 用户信息管理(实现) * @author Lyon Yao * */ public class UserServiceImpl implements UerService { private String user=null; public UserServiceImpl(String user) { super(); this.user = user; } public UserServiceImpl() { super(); } @Scope(value="not") public void delete() { System.out.println(user+"deleted"); } @Scope(value="yes") public String get() { System.out.println(user+"geted"); return user; } @Scope(value="not") public void save(String user) { System.out.println(user+"saved"); } public String getUser() { return user; } }
利用junit进行测试
package my.aop.test; import my.aop.ProxyFactory; import my.service.UerService; import my.service.impl.UserServiceImpl; import org.junit.BeforeClass; import org.junit.Test; /** * @author Lyon Yao * */ public class UserServiceMethodControlTest { private static ProxyFactory proxy; @BeforeClass public static void setUpBeforeClass() throws Exception { proxy=new ProxyFactory(); } @Test public void testDelete(){ UerService userService=(UerService) proxy.instanceProxy(new UserServiceImpl("test")); userService.delete(); userService.get(); userService.save("mam"); } }
外面虽然进行了删除,获得,保存
但实际操作却打印出
pa
pa
testgeted
pa
说明只要获得执行了,看了这个小例子你有啥感想呢,在spring中方法的权限这里是不是这么做出来的呢?我不清楚,但猜可能是的。
发表评论
-
写自己的框架,让别人笑掉大牙吧(IOC2)
2013-04-22 14:23 891上篇中主要使用配置文件来定义一些类实例之间的组织关系 ... -
关于java中对象属性值的校验的思考
2013-04-15 14:09 1550现在在java 开发中经常会遇到要交验某个obje ... -
java 动态编译及执行实现Web式java开发
2012-11-29 17:05 915废话不说,让大家等了这么久,先看看截图 : 编译 ... -
JXLayer 使用简单介绍
2012-11-01 17:25 1316JXLayer 是一个很好的Swing 控件装饰类库,其主要要 ... -
关于Jtextinpt 内容的限制
2012-09-28 15:00 803在JTextInput 限制输入内容,这个一般的通过按键输入进 ... -
构造中的多态
2012-08-25 23:19 851各位仁兄,前几日我在 ... -
Swing JtableModel 使用之旅
2012-07-29 03:25 1021JTable 是我们一般展示数据的一个很好的Grid组建,个人 ... -
模版模式(TemplatePattern)
2012-07-15 11:08 791模版模式分为2个部分 1.抽象模版 2.具体模版 ... -
门面模式(Facade Pattern)
2012-06-10 19:37 972门面模式(Facade Pattern):门面模式在我个人感觉 ... -
代理模式例子
2012-06-04 15:07 979代理模式简单点就和现实中一样,只是代理实质性的还是别人在做。比 ... -
策略模式应对旅行中出现的问题
2012-06-04 14:21 866策略模式是针对在进行过程中出现一些问题的应对模式。一般可以分为 ... -
java 工厂模式简单介绍及例子
2012-06-03 23:16 1055java中工厂模式在java ee中经常碰见,是一种常见的模式 ... -
flex3 socket+java
2012-02-06 12:10 1068首先解决的问题是flex的沙箱问题,由于flex 连接服务器存 ... -
java 自定义注解
2012-01-30 16:09 827写道 package com.my;import j ... -
图片裁剪,缩放 批处理
2012-01-07 15:25 1020package dwr.demo; import ... -
java System.Properties
2011-10-26 13:19 744使用Properties.getProperty方法的参数也可 ... -
JDK自带的实用工具native2ascii.exe
2011-10-26 09:21 836在做Java开发的时候, ... -
dom4j xml 简单操作
2011-10-24 11:02 708package com.my.until; import j ... -
装饰模式例子(模仿修改船只用途)
2011-08-28 20:31 720模仿一次出海旅行中船只的用途的动态调整 功能 写道 pac ... -
观察模式实现粉丝模仿明星说话
2011-08-28 15:05 850艺术圈 写道 package cn.watchermodel ...
相关推荐
### Java软件开发实战:自定义标注类型 #### 16.3 自定义标注类型 **标注(Annotation)** 是Java 5引入的一个重要特性,它为元数据提供了一种标准化的方式来描述程序元素(如类、方法等)。通过使用标注,开发者...
在IT行业中,自定义标注和依赖注入是两个关键的概念,特别是在构建可扩展和灵活的应用程序时。本篇文章将深入探讨这两个主题,并结合“memcache”的安装过程,展示它们如何在实际开发中发挥作用。 首先,让我们从...
关于Java反射的实例,我们可以创建一个简单的例子。假设我们有一个接口`Service`和两个实现类`ServiceImpl1`、`ServiceImpl2`。在不使用反射的情况下,我们通常会通过new关键字创建服务对象。而通过反射,可以在运行...
涉及多种线程,死锁,同步队列,异步线程,涵盖了java的自定义注解及反射,包含了23种设计模式,含注释, 线程1(基本应用) 线程2(同步,死锁,线程池) 注解和泛型 Java 注解(Annotation)又称 Java 标注,是 ...
5、使用图片和TrueType字体进行标注 10 6、Server Java讲座-----扩展Tasks框架 13 7、Server Java 开发实战---自定义command 19 8、 ArcGIS Server Java 讲座--ADF 体系结构 第一部分 21 9、ArcGIS Server JAVA讲座-...
首先,自定义注解的定义是使用Java注解类型来声明一个特殊的接口,这个接口被用于标注在类、方法或字段上,以提供额外的元数据信息。在我们的例子中,定义了一个名为`ActionListenerFor`的注解,它通过使用`@Target...
例子可能涵盖自定义注解和预定义注解的使用。 10. **I/O流的NIO(New IO)**:Java NIO提供了一种非阻塞I/O模型,可以提高性能。例子可能涉及通道、缓冲区、选择器的使用。 11. **网络编程**:Java提供了Socket...
例如,可以使用 `@NonNull` Annotation 来标注不允许为 null 的变量,并通过配套的 Annotation 处理器来检查这些变量是否确实未被赋予 null 值。 #### 三、Annotation 的应用场景 - **代码生成**: 通过 Annotation...
- 注解:自定义注解及其处理器,用于代码的元数据标注和编译时或运行时的处理。 9. **Java高级特性** - 内存管理和垃圾回收:理解Java内存模型,了解GC的工作原理。 - Lambda表达式和函数式编程:Java 8引入的新...
【ArcGIS Server Java 讲座】是一系列关于使用Java技术进行ArcGIS Server开发的专业文档,主要探讨了在ArcGIS Server中使用Java Server Faces (JSF)框架的原因和实践。以下是讲座涉及的一些关键知识点: 1. **为...
总结来说,这个例子涉及到的是如何使用中文分词技术和全文索引来构建一个搜索引擎或信息检索系统。通过理解分词的基本原理和全文索引的构建方法,我们可以实现高效地查找和检索中文文本信息,这对于构建面向中文用户...
在这个例子中,`User`类的`email`和`password`字段分别被注解,表明在展示或传输时,应该使用相应的策略进行处理,如电子邮件的掩码策略和密码的哈希策略。 实现这些注解的处理通常需要一个AOP(面向切面编程)框架...
二、我们可以使用Java自带的WsImport来实现本地代理。这种方法会将WebService翻译成Java类,我们使用类一样去访问WebService就行了。非常好用。 三、除了调用别人发布的webService,也可以自己发布WebService...
“截图软件”是能够捕获计算机屏幕内容并保存为图像文件的工具,通常支持全屏、窗口、自定义区域等多种截图方式,并可能包含编辑、标注等功能。 从描述中的“博文链接”我们可以推测,这可能是一份关于编程学习或...
这个压缩包包含了100个不同的Java源代码示例,每个例子都是一个独立的程序,涵盖了Java语言的关键概念和常用技术。 首先,我们可以从基础部分开始探讨。对于Java初学者,了解基本语法是至关重要的,这包括变量声明...
9. **枚举和注解**:介绍Java枚举类型和注解的使用,它们在代码规范、元数据标注等方面的重要作用。 10. **设计模式**:简述一些常见的设计模式,如单例、工厂、观察者、装饰器等,以及如何在Java中实现这些模式。 ...
Java学习笔记JDK6课件第17章主要讲解了注解(Annotation)的使用,注解是Java语言中一种非常重要的元数据机制,它允许程序员在源代码中嵌入额外的信息,这些信息可以被编译器、IDE或运行时环境读取,以实现特定的功能...
8. **反射和注解**:反射允许程序在运行时动态地获取类的信息和操作类的对象,而注解为元数据提供了一种方式,用于标注代码并自定义编译器或运行时的行为。 9. **JVM优化**:理解Java虚拟机的工作原理,包括内存...
对于初学者来说,这是一个学习Java图形界面编程和CAD设计原理的好例子;对于专业人士,它则提供了一个快速原型设计的平台。无论你是学生还是工程师,都可以尝试一下这个由Java打造的CAD小工具,感受它带来的便利。