Annotation(注解)是什么:
Annotation(注解)
官方的定义:
An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated. Annotations have no direct effect on the operation of the code they annotate.
就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。
Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类 型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在Annotation的“name=value”结构对中。
用处
a. 标记,用于告诉编译器一些信息
b. 编译时动态处理,如动态生成代码
c. 运行时动态处理,如得到注解信息
举例
@Named注解(解决匹配引入一个接口多个实现)可以有值,如果没有值生成的bean名称默认和类名相同。
@Retention用来约束注解的生命周期,分别有三个值,源码级别(source),类文件级别(class)或者运行时级别(runtime)
@requestscope指定一个bean是请求作用域。(请求范围活动、请求上下文破坏)
the examples in Hello1.java
hello1 :一个基于JavaServer Faces技术的应用程序,它使用两个XHTML页面和一个托管bean
首先需要了解 构造型:一种指定一下内容的注释:
-
默认范围
-
零个或多个拦截器绑定
-
(可选)
@Named
注释,保证默认EL命名 -
(可选)
@Alternative
注释,指定具有此构造型的所有bean都是备选方案
CDI提供了一个名为的内置构造型Model
,它用于定义模型 - 视图 - 控制器应用程序架构的模型层的bean。这个构造型指定bean是@Named
和@RequestScoped
:
@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface Model {}
import javax.enterprise.context.RequestScoped;
/**
* 虽然RequestScoped必须与规范要求的内置请求上下文相关联,但允许第三方扩展将其与自己的上下文相关联。
* 指定bean是请求范围的
* 1.请求范围处于活动状态
* 2.请求上下文被销毁
*/
import javax.inject.Named;
/**
* 基于字符串的限定符
* Example usage:
public class Car {
@Inject @Named("driver") Seat driverSeat;
@Inject @Named("passenger") Seat passengerSeat;
...
}
*如果使用bean类的默认名称,则可以指定@Model 为注释,而不必同时指定@Named和@RequestScoped.
*该@Model注释被称为刻板印象,对于封装等注解注释的术语。
*/
//
@Named
@RequestScoped
public class Hello {}