JavaEE开发常⽤注解⼤全(注解开发⼤全)
⽂章⽬录
1、最基础注解(spring-context包下的org.springframework.stereotype)
1.1、@Controller @Service @Repository @Configuration @Component
(1)解释
⽤于标注各个层级的注解,注⼊到spring容器管理
@Controller @Service @Repository @Configuration 都是@Component组合注解只是区分层级关系
注解 层级
@Controller 标注于控制层
@Service 标注于业务层
@Repository 标注于dao持久层(Mybatis使⽤@Mapper)
@Configuration 标注于配置层
@Component 泛指组件,当组件不好归类时可⽤
(2)⽰例
@Controller
public class UserController {
}
1.2、 @Bean
(1)解释
@Bean等价于< Bean >< /Bean >,添加的bean的id为⽅法名。
(2)例⼦
@Configuration
public class AppConfig {}
//@bean 也可以依赖其他任意数量的bean,如果TransferService 依赖 AccountRepository,我们可以通过⽅法参数实现这个依赖
@Bean
public TransferService transferService(AccountRepository accountRepository){
return new TransferServiceImpl(accountRepository);
}
}
这个配置就等同于之前在xml⾥的配置:
@Configuration可理解为⽤spring的时候xml⾥⾯的< beans >标签
@Bean可理解为⽤spring的时候xml⾥⾯的< bean >标签
2、最基础注解(spring-web包下的org.springframework.web.bind.annotation)
2.1、@ResponseBody
(1)解释
该⽅法的返回的结果直接写⼊ HTTP 响应正⽂(ResponseBody)中。
⼀般在异步获取数据时使⽤,通常是在使⽤ @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,⽽是直接写⼊HTTP 响应正⽂中。
(2)例⼦
/例⼦⼀********/
@RequestMapping(value=“user/login”)
@ResponseBody
//将ajax(datas)发出的请求写⼊User对象中,返回json对象响应回去
public User login(User user) {
User user = new User();
user.setUserid(1);
user.setUsername(“MrF”);
user.setStatus(“1”);
return user ;
}
/例⼦⼆********/
@Controller
public class UserController {
@GetMapping("/hello")
@ResponseBody public String hello() {
return “hello spring”;
}
}
2.2、@RequestBody
(1)解释
将 HTTP 请求正⽂插⼊⽅法中,使⽤适合的 HttpMessageConverter 将请求体写⼊某个对象。换句话就是:⽤于接收前端请求的Json参数,并且封装到对应的JavaBean
(2)例⼦
@RequestMapping(value = “user/login”)
@ResponseBody
// 将ajax(datas)发出的请求写⼊User对象中
public User login(@RequestBody User user) {
// 这样就不会再被解析为跳转路径,⽽是直接将user对象写⼊ HTTP 响应正⽂中
return user;
}
(3)使⽤时机
A) GET、POST⽅式提时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded,可选(即⾮必须,因为这种情况的数据@RequestParam,@ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data,不能处理(即使⽤@RequestBody不能处理这种格式的数据);
其他格式,必须(其他格式包括application/json,application/xml等。这些格式的数据,必须使⽤@RequestBody来处理);
B) PUT⽅式提交时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded,必须;multipart/form-data,不能处理;其他格式,必须;
2.3、@RequestMapping
(1)解释
⽤来处理请求地址映射的注解
(2)例⼦
/**
* ⽤于类上,可以没有
*/
@RequestMapping(value ="/controllerDemo")
public class ControllerDemo {
// ⽤于⽅法上,必须有
@RequestMapping(value ="/methodDemo")
public String methodDemo(){
return"helloWorld";
}
}
(3)注解参数
RequestMapping注解有六个属性,下⾯我们把她分成三类进⾏说明。
1、value, method
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后⾯将会说明)
method:指定请求的method类型,GET、POST、PUT、DELETE等
xml标签大全2、consumes,produces
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html; produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、params,headers
params:指定request中必须包含某些参数值是,才让该⽅法处理。
headers:指定request中必须包含某些指定的header值,才能让该⽅法处理请求。
2.4、@PostMapping
(1)解释
⼀个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。
(2)例⼦
@PostMapping("/pay")
public JsonResponse pay(HttpServletRequest request){}
2.5、@GetMapping
(1)解释
⼀个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
(2)例⼦
@GetMapping("/getAll/{companyName}")
public ReturnModel getAllBusByCompany(@PathVariable(value="companyName",required=false)String companyName){} 2.6、@PathVariable
(2)例⼦
访问路径:localhost:8080/hello/1
@GetMapping("/hello/{id}")
public String func(@PathVariable String id){
return id;
}
(3)参数
返回值 参数 作⽤
String value name别名
String name url参数的绑定值
2.7、@RequestParam
(1)解释
⽤于接受前端提交的参数
(2)参数
返回值 参数 作⽤
String value name别名
String name 请求参数对应的属性
boolean required 是否必传
Stirng defaultValue 默认值
(2)例⼦
访问⽅式:localhost:8080/hello?name=张三
@GetMapping("/hello")
public String func(@RequestParam(name ="name", required =false, defaultValue ="张三") String name){
return"OK";
}
2.8、@RestController
(1)解释
相当于@ResponseBody + @Controller,Controller中的⽅法⽆法返回jsp页⾯,
返回的内容就是Return ⾥的内容。
3、persistence注解(javax.persistence包下的javax.persistence)
3.1、@Entity,@Table,@Id,@GeneratedValue, @Column,@Temporal,@Generated
(1)解释
@Entity表明该类是实体类,并且使⽤默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名。如果class名和数据库表中名字不⼀致就⽤@Table,如果class字段名和表中的字段名不⼀直就⽤@Column
@Column⽤来标识实体类中属性与数据表中字段的对应关系
name定义了被标注字段在数据库表中所对应字段的名称;
unique表⽰该字段是否为唯⼀标识,默认为false。如果表中有⼀个字段需要唯⼀标识,则既可以使⽤该标记,也可以使⽤@Table标记中的@UniqueConstraint。
nullable表⽰该字段是否可以为null值,默认为true。
insertable表⽰在使⽤“INSERT”脚本插⼊数据时,是否需要插⼊该字段的值。
updatable表⽰在使⽤“UPDATE”脚本插⼊数据时,是否需要更新该字段的值。insertable和updatable属性⼀般多⽤于只读的属性,例如主键和外键等。这些字段的值通常是⾃动⽣成的。
columnDefinition表⽰创建表时,该字段创建的SQL语句,⼀般⽤于通过Entity⽣成表定义时使⽤。(也就是说,如果DB中表已经建好,该属性没有必要使⽤。)
table表⽰当映射多个表时,指定表的表中的字段。默认值为主表的表名。
length表⽰字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
precision和scaleprecision属性和scale属性表⽰精度,当字段类型为double时,precision表⽰数值的总长度,scale表⽰⼩数点所占的位数。
@Id表名该字段是主键,如果要开启⾃增主键就⽤@GeneratedValue
@Temporal帮Java的Date类型进⾏格式化,⼀共有三种注解值
第⼀种:@Temporal(TemporalType.DATE)——>实体类会封装成⽇期“yyyy-MM-dd”的 Date类型。
第⼆种:@Temporal(TemporalType.TIME)——>实体类会封装成时间“hh-MM-ss”的 Date类型。
第三种:@Temporal(TemporalType.TIMESTAMP)——>实体类会封装成完整的时间“yyyy-MM-dd hh:MM:ss”的 Date类型。
@Generated⾃动⽣成
generated= never 标明此属性值不是从数据库中⽣成。
generated默认值是never。
generated= insert 标明此属性值在insert的时候⽣成,但是不会在随后的update时重新⽣成。
generated= always 标明此属性值在insert和update时都会被⽣成
(2)例⼦
import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name ="batch")
public class Batch{
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
//在插⼊的时候⾃动赋值当前时间
@Column(insertable =false)
@Temporal(TemporalType.TIMESTAMP)
@Generated(GenerationTime.INSERT)
private Date createdTime;
/
/⾃动变化更新时间
@Temporal(TemporalType.TIMESTAMP)
@Column(insertable =false, updatable =false)
@Generated(GenerationTime.ALWAYS)
private Date updatedTime;
//在插⼊的时候⾃动赋值1
@Column(insertable =false,columnDefinition="Short default 1")
@Generated(GenerationTime.INSERT)
private Short status;
4、resteasy注解(jaxrs-api包下的javax.ws.rs)
resteasy 是java体系中⽐较成熟的rest框架,也是jax-rs规范的实现之⼀,dubbox的REST服务框架,就是采⽤的resteasy实现。
默认情况下,resteasy使⽤jackson和jaxb来实现json及xml格式的序列化。应⽤启动时,会⾃动扫描带@Provider的包,到最合适的provider。
这个可以⽤来做分布式,可以通过okhttp3协议来进⾏交互
4.1、@Path、@POST、@Produces、@Consumes、@Context
(1)例⼦
import com.alibaba.dubbo.st.support.ContentType;
import com.sponse.JsonResponse;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.Context;
@Path("/td")
public interface PayIntegrationService {
@Path("/pay")
@POST
@Produces({ ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
@Consumes({ ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
public JsonResponse pay(@Context HttpServletRequest request);
}
5、validation注解(validation-api包下的javax.validation)
5.1、@Valid 和 @属性校验注解
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论