zoukankan      html  css  js  c++  java
  • Annotation注解

    注解(Annotation): 注解,注解,Java5开始支持。用来给特定的类型装备指定的特性.
    元数据(metadata): 描述数据的数据
    元注解: 描述注解的注解(@Target,@Retention)

    必须存在特定的类型之前(类,方法,构造器,字段,局部变量,包).

    在Java中,自带有5个注解:
    Java5有3个: @Override / @Deprecated / @SuppressWarings
    Java7有1个: @SafeVarargs
    Java8有1个: @FunctionalInterface

    @Retention:决定了注解可以保留到代码的哪一个时期.
     一个有三个时期,都封装在RetentionPolicy枚举类中:
     * SOURCE: 该注解在编译时就会丢弃,只能存在于源文件中.
     * CLASS: 当字节码加载进JVM,该就丢失.
     * RUINTIME: 一直存在,直到字节码都挂了
    自定义的注解类,都是要RUNTIME.

    @Target: 决定了注解可以贴在哪些类型之上.
     可以被贴的成员元素类型都封装在ElementType枚举类中.
    掌握:
    ElementType.TYPE         只能修饰类,接口,枚举
    ElementType.METHOD       只能修饰方法
    ElementType.FIELD        只能修饰字段(属性),包括枚举常量
    了解:
    ElementType.ANNOTATION_TYPE只能修饰Annotation
    ElementType.CONSTRUCTOR    只能修饰构造方法
    ElementType.LOCAL_VARIABLE 只能修饰局部变量
    ElementType.PACKAGE      只能修饰包(极少使用)
    ElementType.PARAMETER    只能修饰参数

    @Documented:  使用@Documented标注的注解会保存到API文档中.
    @Inherited:   @Inherited标注的注解可以被子类所继承/遗传.

    Spring中的Annotation

    DI注解的使用:
    1,使用DI注解,在spring的配置文件里面还是需要配置bean, 即IoC还是不能省略的,
     只不过把DI的过程放在了Bean对象中;
    2,@Autowired
      1) @Autowired注解可以放在字段上,也可以放在setter方法上面;
     可以把Bean中的对象中的需要的对象属性自动的注入到目标对象中(相当于自动的DI);
      2) @Autowired注解默认有@Required的功能,即只要有@Autowired的属性,
     则必须在IoC中配置唯一对应的Bean, 否则则需要在@Autowired中添加参数:required=false
      4, DI过程
     1,首先按照类型找;
     2,如果没有找到;系统报错(默认情况下,@Autowired注解有一个@Required注解的作用)
     3,如果找到多个,按照字段或者属性的名字(属性名和Bean的id比较),再用名字和类型去找;
      如果1,3都没有找到,报错;
     4,可以通过在字段或者setter方法上添加@Qualifier("yourName")来规定我要注入的bean的名字;
     5,可以在Spring的主要对象上面添加@Autowired,让spring自动注入;
     6,所以,我们的spring的测试类,可以直接引用需要测试的目标对象就可以了;

    @Resource
       1,也可以通过@Resource注解来自动注入;
       2,怎么找对象?
         1,首先按照字段或者属性的名字找,如果找不到,则报错,@Resource关联的对象必须存在
         2,如果按照名字找不到,再按照类型来找;
         3,可以通过@Resource的name属性来指定一个bean注入;
     如果一旦设置了@Resource的name属性,就不会去匹配类型;
         5,因为@Resource是javax的注解,所以@Resource不能注入spring中关键的对象;

    Ioc注解

    使用IoC注解:

    1,在配置文件中告诉spring去哪里扫描实例对象, 这个标签只能写一个, 多个包需要使用英文逗号隔开:
     <context:component-scan base-package=""></context:component-scan>
    2,在类的前面添加anntation:
      1,@Component:一般我们写在工具类上面;
      2,@Service:一般我们写在服务对象上;
      3,@Repository:一般写在DAO上面;
      4,@Controller:一般写在Action上面;
    这四个标签对于spring来说,作用相同,主要是用来区分各个层级的关系的;

    <bean id="" class="" factory-method="" factory-bean="" init-method="" destory-method="" scope=""/>
    1,id:所有的四个标签都支持value值,这个值就是id的名字;
    2,class:已经写了注解,这个就没有意义了;
    3,factory-method和factory-bean就没有对应的标签了;
    4,init-method:把@PostConstruct直接放在init方法上面;
    5,destory-method:把@PreDestroy放在destory方法上面;
    6,scope,在类上面添加@Scope("prototype");

  • 相关阅读:
    CF 444B(DZY Loves FFT-时间复杂度)
    摆弄【Nhibernate 协会制图--导乐陪伴分娩】
    固定的报文统计报告的规定
    CSS——(2)与标准流盒模型
    自动复制转换StringBuffer
    IM信息网
    Oracle Redo Log
    【转载】有哪些省时小技巧,是每个Linux用户都应该知道的
    Linux snmp
    MySQL zabbix
  • 原文地址:https://www.cnblogs.com/huike/p/6628909.html
Copyright © 2011-2022 走看看