@Inject,@Produces,@QueryParam,@Path注解

之前学习Java的时候学过注解,但是这几个注解还是头一次见,赶紧学习记录一下

@Inject

可以出现在三种类成员之前,表示该成员需要注入依赖项,按运行时的处理顺序这三种成员类型是:

  1. 构造方法
  2. 方法
  3. 属性
    在构造方法使用@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来用,表示资源的地址

你可能感兴趣的:(java,注解,后端)