之前学习Java的时候学过注解,但是这几个注解还是头一次见,赶紧学习记录一下
@Inject
可以出现在三种类成员之前,表示该成员需要注入依赖项,按运行时的处理顺序这三种成员类型是:
- 构造方法
- 方法
- 属性
在构造方法使用@Inject时,其参数是在运行时由配置好的IOC容器提供的,运行时调用MurMessage类的构造方法时,Ioc容器会注入其参数Header对象
@Inject
public MurmurMessage(Header header)
{
this.headr = header;
}
也可以使用@Inject注解方法,与构造方法一样,运行时可以注入的参数为0或多个,但是用参数注入的方法不能声明为抽象方法,也不能声明其自身的类型参数
@Inject
public void setContent(Content concent)
{
this.content = content;
}
也可以属性直接注入,可以当做@Autowried用
public class MurmurMessager
{
@Inject
private MurmurMessage murmurMessage;
...
}
@Produces
注解@Produces用于定义方法的响应实体的数据类型,可以定义一个或多个,同时可以为每种类型定义质量因素,质量因素是取值范围从0到1的小数值,如果不定义质量因素,那么该类型的质量因素默认为1
@Path("conneg-resource")
public class ConnegResource {
@GET
@Path("{id}")
//关注点1:媒体类型为XML
@Produces(MediaType.APPLICATION_XML)
public Book getJaxbBook(@PathParam("id") final Long bookId) {
return new Book(bookId);
}
@GET
@Path("{id}")
//关注点2:媒体类型为JSON
@Produces(MediaType.APPLICATION_JSON)
public Book getJsonBook(@PathParam("id") final Long bookId) {
return new Book(bookId);
}
}
资源地址相同的两个GET方法,一个定义响应实体格式为XML,一个定义响应实体格式为JSON,如果请求中明确定义可接受的数据类型为两者之一,处理方法是定义相应数据类型的方法,如果两者都定义了,处理方法因该是质量因素高的方法,否则优先选择XML的方法
@QueryParam
获取get请求中的查询参数
public Response test(@QueryParam("deviceId") long deviceId, Attribute entity) throws StorageException {}
@BeanParam
获取请求参数中的数据,用实体Bean进行封装
public Response test(@BeanParam User user) throws StorageException {
@Path注解
属于javax.ws.rs包是jax-rs规范中定义的包名,全称是java API for RESTful Services这是一套规范
@Path就当做@RequestMapping来用,表示资源的地址