SpringMVC 自己写注解,理解注解

前几天看到注解这块,反正也没事,就当成自己学习,慢慢写注解,从底层写起,我也是个小吧,不足的地方强大家谅解

先是自己定义注解,比如我定义的注解有两个,一个是@longin,一个是@qw,代码如下

@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value={java.lang.annotation.ElementType.METHOD})
public @interface longin {                                                                                 //使用时候是@login
String value() default "没改变value";
String hh() default "没改变hh";

}

@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value={java.lang.annotation.ElementType.METHOD})
 @interface qw {                                                                                            //使用时候是@qw
String value() default "loginaction";
String hh() default "COM.fanpeng.zhujie.ffs";


这样,我们就定义了两个注解,现在我们需要解析注解的能容,让方法去认识和使用注解,方法如下:


import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class getzhujie { 
public static void main(String[] args) throws SecurityException, InstantiationException, IllegalAccessException, ClassNotFoundException, IllegalArgumentException, InvocationTargetException {
getxxx("COM.fanpeng.zhujie.ffs");                                 //字符串为使用注解的类的全类名
}

public static Object getObject(String classfullname) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
return Class.forName(classfullname).newInstance();      //先让全类名反射,等到object类型
}

// public static Method[] getmethod(String classfullname) throws SecurityException, InstantiationException, IllegalAccessException, ClassNotFoundException{
// return getObject(classfullname).getClass().getDeclaredMethods();           
// }

public static Method[] getmethod(Object obj) throws SecurityException, InstantiationException, IllegalAccessException, ClassNotFoundException{
return obj.getClass().getDeclaredMethods();                 //然后得到这个类的所有方法的集合
} 

public static void getxxx(String classfullname) throws SecurityException, InstantiationException, IllegalAccessException, ClassNotFoundException, IllegalArgumentException, InvocationTargetException{

Object object = getObject(classfullname);     //先让全类名反射,等到object类型

Method[] methods = getmethod(object);       //然后得到这个类的所有方法的集合

for (Method method : methods) {            //遍历这个方法
Annotation[] annotations = method.getAnnotations();   //得到每个方法的注解集合
for (Annotation annotation : annotations) {       //遍历注解
if (annotation instanceof qw) {                   //判断注解的名称是否与我们自己写的注解名称相同
qw lo=(qw) annotation;                      //如果相同,将注解强转成我们写的注解的类型
String str=lo.value();                        //得到我们注解里面定义的value
String hh=lo.hh();                                  //得到我们注解里面定义的hh
method.invoke(object,new Object[]{str,hh});                //然后注入,让不同的注解去执行不同的方法
}
}
}

}



这样我们的注解解析就做完了,现在我们用一个例子来看:

public class ffs {   //这就是使用的类,上面那个字符串的全类名就是这个

@qw(value="login.action", hh="123")          //我们可以给注解自定义值,这是注解里面的value和hh值就变成我们自定义的了
public void makeFefs(String str1, String str2){
System.out.println(str1+str2);
}

@qw                                                              //如果不自定义值,注解的值就是我们在最前边定义的那个值

public void makeFehfs(String str1, String str2){
System.out.println("str1+str2");
}
@login                                                            //如果不自定义值,注解的值就是我们在最前边定义的那个值

public void makeFehfs(){
System.out.println("方法也可以不传值");
}



执行第二个类,我们就可以得到下面的结果:

login.action123
方法也可以不传值
str1+str2

上面的文章可以向我们展示,注解的值可以用到,也可以不用的,注解是方法的一部分



小白一个,错的地方请大家指出,第一次发博客,格式什么的也不懂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值