标签:style blog http io ar color os sp for
一、编写Dao类
1
2
3
4
5
6
7
8
9
10
11
|
package cn.com.songjy.annotation; import java.util.Date; public class MyDao { public String time(){ return "你好,现在的时间是:" + new Date(); } } |
二、编写属性文件【my.properties,类似spring的配置文件】并将MyDao类配置到其中,如下:
1
|
myDao=cn.com.songjy.annotation.MyDao |
三、编写读取属性配置文件的类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package cn.com.songjy.annotation; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class PropertiesUtil { private static InputStream in = PropertiesUtil. class .getClassLoader() .getResourceAsStream( "my.properties" ); public PropertiesUtil() { } private static Properties props = new Properties(); static { try { props.load(in); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static String getValue(String key) { return props.getProperty(key); } public static void updateProperties(String key, String value) { props.setProperty(key, value); } } |
四、编写注解类
1
2
3
4
5
6
7
8
9
10
11
12
|
package cn.com.songjy.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention (RetentionPolicy.RUNTIME) public @interface MyDiAnnotation { //public String name(); String value() default "" ; //value是Annotation的默认属性 } |
五、反射注入工具类编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package cn.com.songjy.annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MyAnnotationUtil { MyAnnotationUtil(){ di( this ); } public static void di(Object obj){ try { Method[] methods = obj.getClass().getDeclaredMethods(); for (Method method : methods) { if (method.isAnnotationPresent(MyDiAnnotation. class )){ //只处理包含MyDiAnnotation的方法 MyDiAnnotation diAnnotation = method.getAnnotation(MyDiAnnotation. class ); String class_key = diAnnotation.value(); if ( null ==class_key || class_key.trim().length()== 0 ){ //key值默认为setXXX中的XXX且第一个字母要转换为小写 class_key = method.getName().substring( 3 ); class_key = class_key.substring( 0 , 1 ).toLowerCase() + class_key.substring( 1 ); } method.invoke(obj, Class.forName(PropertiesUtil.getValue(class_key)).newInstance()); } } } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } |
六、编写测试类
测试类一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package cn.com.songjy.annotation; public class MyService01 extends MyAnnotationUtil { MyDao myDao; public MyDao getMyDao() { return myDao; } @MyDiAnnotation public void setMyDao(MyDao myDao) { this .myDao = myDao; } public void hello(){ System.out.println(myDao.time()); } public static void main(String[] args) { new MyService01().hello(); } } |
测试类二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package cn.com.songjy.annotation; public class MyService02 extends MyAnnotationUtil { MyDao dao; public MyDao getDao() { return dao; } @MyDiAnnotation ( "myDao" ) public void setDao(MyDao dao) { this .dao = dao; } public void hello(){ System.out.println(dao.time()); } public static void main(String[] args) { new MyService02().hello(); } } |
输出结果如下:你好,现在的时间是:Sat Jun 29 17:02:03 CST 2013
标签:style blog http io ar color os sp for
原文地址:http://www.cnblogs.com/Free-Thinker/p/4157532.html