一·介绍
注解(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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
@Named public class ProductService { @Inject private ProductDao productDao;
public Product getProductDetail(String productId) { 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;
public RequestBean() { uuid = UUID.randomUUID(); }
public void printId() { System.out.println("RequestBean:" + uuid); }
3>@model
@Controller public class HelloWorldController { @ModelAttribute("attributeName") public String addAccount(@RequestParam String abc) { return abc; }
@RequestMapping(value = "/helloWorld") public String helloWorld() { return "helloWorld"; } }