关于annotation的认识
一·介绍
注解(Annotations)是一种元数据,提供了程序之外的一些程序信息。注解并不会直接影响被注解的代码。注解有很多用法:
1. 为编译器提供信息(Information for the compiler) ——编译器能直接使用注解检查错误(detect errors)和禁止警告(suppress warnings)。
2. 编译期和部署时处理(Compile-time and deployment-time processing) —— 软件工具可以使用注解生成代码,XML文件等待。
3. 运行期处理(Runtime processing) —— 一些注解可以在运行期被检测。
注解是一种特殊种类的元数据,它能够关联Java语言中不同元素和结构。有意思的是,在Java生态系统中大多数使用样板XML描述符的地方,注解在消除这些XML描述符上做出了很大的贡献。注解引入了新的,类型安全以及非常强健的配置和个性化技术。注解本身对它所注解的元素不会造成任何直接的影响。但是,依靠注解和它的定义方式,它们可以被Java编译器(注解最好的实例就是我们前面的文章中所使用的@Override注解)、注解处理器和运行时代码使用反射和其他的虚拟机内省技术使用。
二·举例
1> @named和inject
package com.javabeat.injectandnamedannotations;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Service;
@Named
public class ProductService {
@Inject
private ProductDao productDao;
public class ProductService {
@Inject
private ProductDao productDao;
public Product getProductDetail(String productId) {
Product product = productDao.getProduct(productId);
return product;
}
}
Product product = productDao.getProduct(productId);
return product;
}
}
2>@requestscope
@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST,proxyMode= ScopedProxyMode.INTERFACES)
public class RequestBean implements IRequestBean {
private UUID uuid;
@Scope(value = WebApplicationContext.SCOPE_REQUEST,proxyMode= ScopedProxyMode.INTERFACES)
public class RequestBean implements IRequestBean {
private UUID uuid;
public RequestBean() {
uuid = UUID.randomUUID();
}
uuid = UUID.randomUUID();
}
public void printId() {
System.out.println("RequestBean:" + uuid);
}
System.out.println("RequestBean:" + uuid);
}
3>@model
@Controller
public class HelloWorldController {
@ModelAttribute("attributeName")
public String addAccount(@RequestParam String abc) {
return abc;
}
public class HelloWorldController {
@ModelAttribute("attributeName")
public String addAccount(@RequestParam String abc) {
return abc;
}
@RequestMapping(value = "/helloWorld")
public String helloWorld() {
return "helloWorld";
}
}
public String helloWorld() {
return "helloWorld";
}
}
浙公网安备 33010602011771号