注解基本信息
自定义注解及使用
定义注解
package com.hsh.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 定义注解 @ServiceAno * 保留到运行时,作用对象为方法 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ServiceAno { String service(); }
解析注解
package com.hsh.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ServiceAnoParser { /* * 解析注解,完成service的注入 */ public static void setService(Object action) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException{ Class<Action> clazz = (Class<Action>) action.getClass(); for(Field f : clazz.getDeclaredFields()){ for(Annotation ann : f.getDeclaredAnnotations()){ if(ann instanceof ServiceAno){ String methodName = getSetter(f.getName()); Method setter = clazz.getMethod(methodName, Service.class); setter.setAccessible(true); ServiceAno sa = (ServiceAno)ann; String service = sa.service(); Class serClazz = Class.forName(service); setter.invoke(action, serClazz.newInstance()); } } } } /** * 生成set方法的方法名字符串 */ public static String getSetter(String fieldName){ String name = "set"; name += (fieldName.charAt(0) + "").toUpperCase(); if(fieldName.length() > 1 ){ name += fieldName.substring(1); } return name; } }
使用注解
package com.hsh.annotation; public interface Service { public void service(); }
package com.hsh.annotation; public class OracleService implements Service{ @Override public void service(){ System.out.println("oracle service..."); } }
package com.hsh.annotation; public class MySqlService implements Service{ @Override public void service(){ System.out.println("mysql service..."); } }
package com.hsh.annotation; public class Action { //使用@ServiceAno 将MySqlService实例注入给mySqlService @ServiceAno(service = "com.hsh.annotation.MySqlService") private Service mySqlService; //使用@ServiceAno 将OracleService实例注入给oracleService @ServiceAno(service = "com.hsh.annotation.OracleService") private Service oracleService; public void service(){ mySqlService.service(); oracleService.service(); } public Service getMySqlService() { return mySqlService; } public void setMySqlService(Service mySqlService) { this.mySqlService = mySqlService; } public Service getOracleService() { return oracleService; } public void setOracleService(Service oracleService) { this.oracleService = oracleService; } }
测试
package com.hsh.annotation; public class Main { public static void main(String[] args) { Action action = new Action(); try { ServiceAnoParser.setService(action); action.service(); }catch (Exception e) { e.printStackTrace(); } } }
测试结果
相关推荐
java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解...
java注解和反射的个人学习笔记
JAVA注释模板以及详细设置解释等等。 注释模板 如何设置
Java注解实现
超级好用的 java 注释模板,吐血总结,整理。吐血总结,整理。
主要包括:普通java注解,hibernate注解,spring注解,struts2注解,对于学习注解的朋友有很大的帮助!
简述java注解功能及用法,有代码示例。看起来还成,比较简单,学spring注入的时候要用到注解注入的话,本书属于必看版。
java注释全解,内容全面,包括hibernate注解、Java注解、Spring注解、SSH全注解等内容,分为4个文档介绍。另附一些精品java学习资料,欢迎大家下载学习。
入门级java 注解学习示例代码
java注解解析知识要点 精简易懂
Java注解、反射、动态代理demo
Java 注解(Annotation) - 请认准 ih0qtq
Java注解的使用例子,使用Ant编译,执行run.bat运行.
java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的通用工具类,代码简洁优雅 。基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel...
eclipse中java类注释模板,有需要的朋友可以参考使用。
这是自己总结的java注解 使用了思维导图,方便读取,快速阅读
java注解详解[文].pdf
java 注释模板 java 注释模板 java 注释模板 java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板
自己做得java项目注释统计工具,可统计代码行数,注释行数,能统计各种注释样式,能看统计详细情况,能生成报表,可自由控制合格率!算法高效!
java 注解 反射 字节码 类加载 包括pdf资料以及全部源码文件,具有非常大参考价值和学习意义