Java及spring 注解(反射原理)

java注解:

       Java5.0以后引入了注解的概念

        注解只在源码阶段保留(编译时忽略),不会影响程序内部的东西,决定运行级别 是一个标识

        定义一个注解就可以在其他类中使用

1.元注解:注解上面的注解

        (1)@ Retention(...)

                        

                       Java及spring 注解(反射原理)_第1张图片

    (2)@Documented

                     Java及spring 注解(反射原理)_第2张图片 

(3).@Target------注解运行的地方(构造函数/属性/方法上)

                        

(4).@Inherited

                     Java及spring 注解(反射原理)_第3张图片

(5)@Repeatable(...) 可多次重复使用--可以将多个值重复赋给容器

 

注解的属性:也叫成员变量,注解只有成员变量,没有方法

 注解的成员变量在注解中以“无形参的方法”形式来声明,其方法名定义该成员变量的名字,其返回值定义了该成员变量的类型;

  给注解的属性赋值:

当一个注解(RunAnnotation2)没有属性---它只是一个标识 ()可以省略

                 Java及spring 注解(反射原理)_第4张图片 

                 Java及spring 注解(反射原理)_第5张图片

                  

 

Java预用(本来就有)注解:

     @Deprecated:过时的方法或者类(还可以用 只是有了更好的升级)

     @Override:方法重载

     @SuppressWarnings(“要忽略的内容”):阻止警告

     @SafeVarargs:参数安全类型

     @FunctionalInterface:函数式接口注解

 

注解与反射:

注解通过反射获取(通过反射获取注解信息), 通过类 方法名名字获取

Java及spring 注解(反射原理)_第6张图片

mvc在运行时在handlemapping会读你的注解 拿到你的注解的值 拼成一个请求发送到DispaterServlet或者controller

自定义注解:可以定义一个static 方法获取注解,,然后控制程序的走向

package com.spring.annotation;

@TestAnnotation(id="666",message = "wxx")
public class Test {

    //只有当id=666时才访问到这个方法
    private void test(){
        System.out.println("test run");
    }

    public void runTest()
    {
        //获取类的注解
        TestAnnotation t=this.getClass().getAnnotation(TestAnnotation.class);
        if(t.id().equals("666"))
        {
            this.test();
        }
    }

}

 

 只要实例化对象就判断是否加了该注解????

      使用注解--- 反射原理(需要把注解加到多个类或者多个方法)判断逻辑

              Java及spring 注解(反射原理)_第7张图片       

            Java及spring 注解(反射原理)_第8张图片

 

spring 注解:

自动注入:成员变量上

     @Autowired:自动注入 默认ByType (包/接口的实现类)找,如果找到有多个bean 再按ByName查找

                       (用你注入的类型去匹配你定义的bean 当匹配到多个时 根据 唯一的name再进行匹配  多个则异常)

                          

  @Qualifier("name"):名字注入

                            

      @Resource:成员变量

                              Java及spring 注解(反射原理)_第9张图片

 @Singleton:单例类

 @RequestBody:可以放协议上的内容

             

@RequestParam:获取参数

               Java及spring 注解(反射原理)_第10张图片

         

@RequestMapping:请求映射

                 

 @ResponseBody:返回字符串 去掉后返回原先视图指定的页面

 @Controller:声明控制器  控制层

 @Serviceservice层

 @Repository相当于定义成bean 注入时便于分层

 @Component分层

                

 

 ps:spring 的注解很强大,其应用机制主要就是反射原理  通过获取对象做判断逻辑;


 

你可能感兴趣的:(Java及spring 注解(反射原理))