菜单

Boot常用注解小结

2019年10月5日 - 4166am金沙下载

在Spring
boot中,注解使用非常频繁,通过使用注解可以有效的提供开发效率,让项目代码看起来更简洁。

之前做过一个项目后台是使用Spring
boot框架的,本篇文章将项目中高频使用的一些注解总结出来,并从不同层面角度来了解不同注解的作用以及使用例子

@ResponseBody
注解@RequestBody注解@RequestMapping注解@RequestParam注解@Controller注解

AccountController .java 

AccountController .java 

@ResponseBody 注解:将内容或对象作为 HTTP
响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。一般注释在方法上,意思就是将方法的返回值通过一定的转换发送给前端页面。@RequestBody
注解:将HTTP请求正文(即请求体,post请求的内容)转换为适合的HttpMessageConverter对象。@RequestMapping
注解:用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

Java代码  

Java代码  

例子如下:

1.       
/** 

1.       
/** 

@RequestMapping("/create")@ResponseBodypublic Result createProject(@RequestBody DevopsGitlabProject project) { try { Result<GitlabProject> result = new Result<>(); result.setResult(gitProjectService.createProject; return result; } catch (Exception e) { logger.info(ErrorInfo.errorInfo; return ErrorInfo.handError; }}

2.       
 * 2010-1-23 

2.       
 * 2010-1-23 

@RequestParam注解:匹配前台传来的参数给注解参数。比如下面前台传来的是project_id,匹配到projectId参数上。例子如下:

3.       
 */  

3.       
 */  

@RequestMapping(“/project")@ResponseBodypublic Result deleteProject(@RequestParam(name = "project_id") Integer projectId) { try { Result<String> result = new Result<>(); gitProjectService.deleteProject(projectId); result.setResult; return result; } catch (IOException e) { logger.info(ErrorInfo.errorInfo; return ErrorInfo.handError; }}

4.       
package org.zlex.spring.controller;  

4.       
package org.zlex.spring.controller;  

关于Controller 类以及 @Controller 注解1:spring mvc 中将 controller
认为是 MVC中的C –控制层2:规范命名 类名
xxxController3:如果不基于注解:该类需要继承
CommandController如果基于注解: 在类名前加上
@controller4:补充:将类名前加上该注解,当spring启动 或者web服务启动
spring会自动扫描所有包(当然,这个可以设置)作用: 就是告诉服务器
这个类是MVC中的C 这个类可以接收用户请求 处理用户请求

5.       
  

5.       
  

备注:@RequestMapping
注解的详解理解:用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。RequestMapping注解有六个属性,下面我们把她分成三类进行说明。附注:属性就是指指写在注解后面括号里面的内容,即:@RequestMapping(属性1=属性值,属性2=属性值….)1、
value, method;value: 指定请求的实际地址,指定的地址可以是URI Template
模式;默认RequestMapping(“….str…”)即为value的值;method:
指定请求的method类型, GET、POST、PUT、DELETE等;2、
consumes,produces;consumes:
指定处理请求的提交内容类型(Content-Type),例如application/json,
text/html;produces:
指定返回的内容类型,仅当request请求头中的类型中包含该指定类型才返回;3、
params,headers;params:
指定request中必须包含某些参数值是,才让该方法处理。headers:
指定request中必须包含某些指定的header值,才能让该方法处理请求。

6.       
import javax.servlet.http.HttpServletRequest;  

6.       
import javax.servlet.http.HttpServletRequest;  

@Service注解@Resource注解@Autowired注解@Resource注解@Value注解

7.       
import javax.servlet.http.HttpServletResponse;  

7.       
import javax.servlet.http.HttpServletResponse;  

@Service注解:将service层对象注入到spring容器中,和xml配置文件中的<bean></bean>标签作用一样。

8.       
  

8.       
  

@Resource注解:注入bean对象

9.       
import org.springframework.beans.factory.annotation.Autowired;  

9.       
import org.springframework.beans.factory.annotation.Autowired;  

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

10.    
import org.springframework.stereotype.Controller;  

10.    
import org.springframework.stereotype.Controller;  

@Autowired:按byType自动注入对象@Autowired 与@Resource的区别:1、
@Autowired与@Resource都可以用来装配bean.
都可以写在字段上,或写在setter方法上。2、
@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:@Autowired()@Qualifier(“baseDao”)private
BaseDao baseDao;

11.    
import org.springframework.web.bind.ServletRequestUtils;  

11.    
import org.springframework.web.bind.ServletRequestUtils;  

附注:关于ByName和Bytype的使用,ByName的意思是在容器中找到与注释下的变量名一致的对象注入给变量。ByType就是找到上下文与注释下的变量类型一致的类对象的类型,注入给注释下的变量。推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

12.    
import org.springframework.web.bind.annotation.RequestMapping;  

12.    
import org.springframework.web.bind.annotation.RequestMapping;  

@Value注解意思:在connection中有的,指定资源文件中的某个变量值。例子如下:@Value(“${git_host}”)private
String HOSTNAME;

13.    
import org.springframework.web.bind.annotation.RequestMethod;  

13.    
import org.springframework.web.bind.annotation.RequestMethod;  

@Transactional注解的作用:事务处理,当删除出现异常,回滚之前删除的。注意:删除的操作必须要有@
Transactional注解,添加和修改也要有这个注解例子如下:

14.    
import org.zlex.spring.service.AccountService;  

14.    
import org.zlex.spring.service.AccountService;  

@Override@Transactionalpublic void deleteUser(Integer userId) throws IOException { aclUserRepository.deleteUser; gitlabAPI.deleteUser;}

15.    
  

15.    
  

@Repository注解@Query注解

16.    
/** 

16.    
/** 

@Param注解

17.    
 *  

17.    
 *  

@Repository注解意思:操作表的接口。@Query注解表示:下面的方法执行的就是该注解中的查询的sql语句,方法的返回值就是对应的查询结果,@Param注解表示@Query:方法执行的查询语句,查询的结果就是方法的返回值(删除修改等无返回值不返回结果)@Param:将方法中的参数值赋给注解中的参数,再将注解的参数放入查询语句的与注解同名的参数中。

18.    
 * @author <a href=”mailto:zlex.dongliang@gmail.com”>梁栋</a> 

18.    
 * @author <a href=”mailto:zlex.dongliang@gmail.com”>梁栋</a> 

例子如下:

19.    
 * @version 1.0 

19.    
 * @version 1.0 

@Repositorypublic interface AclExaminationRepository extends JpaRepository<AclExamination, Integer>, JpaSpecificationExecutor<AclExamination> { @Query(value = "select * from acl_examination where leader_id=:leaderId",nativeQuery = true) public List<AclExamination> getExaminationMessageList(@Param("leaderId")Integer leaderId); @Query(value = "select * from acl_examination where id=:examinationId",nativeQuery = true) public AclExamination getExaminationMessage(@Param("examinationId")Integer examinationId);}

20.    
 * @since 1.0 

20.    
 * @since 1.0 

@Entity注解@Table注解@GeneratedValue@Transient@Id@Temporal

21.    
 */  

21.    
 */  

@Entity注解:表示的是关于表映射的类的注解@Table注解:类映射的表的表名@GeneratedValue
注解:在表的映射类的主键上加入这个注解,那么在向表中创建这个对象的时候,就会自动创建主键id。@Transient注解:在映射类中有的字段,但表中没有,忽略注解下字段的映射。@Id注解:这个属性是表中的主键

22.    
@Controller  

22.    
@Controller  

@Temporal(TemporalType.TIMESTAMP)注解:数据库中的Date类型,取到页面上是yyyy-MM-dd
hh-mm-ss格式利用@Temporal则可以获取自己想要的格式类型TIMESTAMP
yyyy-MM-dd hh:mm:ss 2016-12-07 11:47:58.697这个是会显示到毫秒的DATE
yyyy-MM-ddTIME hh:mm:ss

23.    
@RequestMapping(“/account.do”)  

23.    
@RequestMapping(“/account.do”)  

例子如下:

24.    
public class AccountController {  

24.    
public class AccountController {  

@Entity@Table(name="acl_role")public class AclRole { @Id @Column(name = "id") @GeneratedValue private Integer id; @Column(name = "role_name") private String roleName; @Column(name = "role_permission") private String rolePermission; @Transient private String sshKey;//该属性不映射表中字段 .. .. .. . @Temporal(TemporalType.TIMESTAMP) @Column(name = "created_at") private Date createdAt;}

25.    
  

25.    
  

@JsonProperty注解:通过前台得到的字段根据这个注解匹配到相应字段(如果没有注解,会直接根据变量名匹配)。写这个注解的目的就是为了避免前台书写变量格式和后台变量命名格式不统一的冲突!

26.    
    @Autowired  

26.    
    @Autowired  

public class DevopsExamineBacklogVO { private String initiator; private String type; @JsonProperty("task_id") private String taskId; @JsonProperty("created_at") private String createdAt;}

27.    
    private AccountService accountService;  

27.    
    private AccountService accountService;  

@Component注解意思:
把普通pojo实例化到spring容器中,相当于配置文件中的<bean />

28.    
  

28.    
  

@PostConstruct注解:在当前类构造器初始化执行执行注解下的方法

29.    
    @RequestMapping(method = RequestMethod.GET)  

29.    
    @RequestMapping(method = RequestMethod.GET)  

@PostConstructprivate void init() { this.gitlabAPI = GitlabAPI.connect(HOSTNAME,APITOKEN); this.gitlabAPI.setRequestTimeout(REQUESTTIMEOUT);}

30.    
    public void hello(HttpServletRequest request, HttpServletResponse response)  

30.    
    public void hello(HttpServletRequest request, HttpServletResponse response)  

@Bean注解:将方法返回值的bean对象注入spring容器中

31.    
            throws Exception {  

31.    
            throws Exception {  

@Beanpublic RestTemplate restTemplate(){ return new BasicAuthRestTemplate(username, password);}

32.    
  

32.    
  

33.    
        String username = ServletRequestUtils.getRequiredStringParameter(  

33.    
        String username = ServletRequestUtils.getRequiredStringParameter(  

34.    
                request, “username”);  

34.    
                request, “username”);  

35.    
        String password = ServletRequestUtils.getRequiredStringParameter(  

35.    
        String password = ServletRequestUtils.getRequiredStringParameter(  

36.    
                request, “password”);  

36.    
                request, “password”);  

37.    
        System.out.println(accountService.verify(username, password));  

37.    
        System.out.println(accountService.verify(username, password));  

38.    
    }  

38.    
    }  

39.    
}  

39.    
}  

分段详述: 

分段详述: 

Java代码  

Java代码  

1.       
@Controller  

1.       
@Controller  

2.       
@RequestMapping(“/account.do”)  

2.       
@RequestMapping(“/account.do”)  

这两行注解,@Controller是告诉Spring容器,这是一个控制器类,@RequestMapping(“/account.do”)是来定义该控制器对应的请求路径(/account.do) 

这两行注解,@Controller是告诉Spring容器,这是一个控制器类,@RequestMapping(“/account.do”)是来定义该控制器对应的请求路径(/account.do) 

Java代码  

Java代码  

1.       
@Autowired  

1.       
@Autowired  

2.       
private AccountService accountService;  

2.       
private AccountService accountService;  

这是用来自动织入业务层实现AccountService,有了这个注解,我们就可以不用写setAccountService()方法了! 
同时,JSR-250标准注解,推荐使用@Resource来代替Spring专有的@Autowired注解。 

这是用来自动织入业务层实现AccountService,有了这个注解,我们就可以不用写setAccountService()方法了! 
同时,JSR-250标准注解,推荐使用@Resource来代替Spring专有的@Autowired注解。 

引用

引用

Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 

Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 

  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。 

  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。 

  @Resource装配顺序 

  @Resource装配顺序 

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 

  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 

  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 

  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 

  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(见2);如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配; 

  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(见2);如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配; 

  1.6. @PostConstruct(JSR-250) 

  1.6. @PostConstruct(JSR-250) 

在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。

在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。

Java代码  

Java代码  

1.@RequestMapping(method = RequestMethod.GET)  

1.@RequestMapping(method = RequestMethod.GET)  

2.public void hello(HttpServletRequest request, HttpServletResponse response)  

2.public void hello(HttpServletRequest request, HttpServletResponse response)  

3.        throws Exception {  

3.        throws Exception {  

4.  

4.  

5.    String username = ServletRequestUtils.getRequiredStringParameter(  

5.    String username = ServletRequestUtils.getRequiredStringParameter(  

6.            request, “username”);  

6.            request, “username”);  

7.    String password = ServletRequestUtils.getRequiredStringParameter(  

7.    String password = ServletRequestUtils.getRequiredStringParameter(  

8.            request, “password”);  

8.            request, “password”);  

9.    System.out.println(accountService.verify(username, password));  

9.    System.out.println(accountService.verify(username, password));  

10.    
}  

10.    
}  

注解@RequestMapping(method = RequestMethod.GET)指定了访问方法类型。 
注意,如果没有用这个注解标识方法,Spring容器将不知道那个方法可以用于处理get请求! 

注解@RequestMapping(method = RequestMethod.GET)指定了访问方法类型。 
注意,如果没有用这个注解标识方法,Spring容器将不知道那个方法可以用于处理get请求! 

对于方法名,我们可以随意定!方法中的参数,类似于“HttpServletRequest request, HttpServletResponse
response”,只要你需要方法可以是有参也可以是无参

对于方法名,我们可以随意定!方法中的参数,类似于“HttpServletRequest request, HttpServletResponse
response”,只要你需要方法可以是有参也可以是无参

接口不需要任何Spring注解相关的东西,它就是一个简单的接口! 
重要的部分在于实现层,如下所示: 
AccountServiceImpl.java 

接口不需要任何Spring注解相关的东西,它就是一个简单的接口! 
重要的部分在于实现层,如下所示: 
AccountServiceImpl.java 

Java代码  

Java代码  

1./** 

1./** 

2. * 2010-1-23 

2. * 2010-1-23 

3. */  

3. */  

4.package org.zlex.spring.service.impl;  

4.package org.zlex.spring.service.impl;  

5.  

5.  

6.import org.springframework.beans.factory.annotation.Autowired;  

6.import org.springframework.beans.factory.annotation.Autowired;  

7.import org.springframework.stereotype.Service;  

7.import org.springframework.stereotype.Service;  

8.import org.springframework.transaction.annotation.Transactional;  

8.import org.springframework.transaction.annotation.Transactional;  

9.import org.zlex.spring.dao.AccountDao;  

9.import org.zlex.spring.dao.AccountDao;  

10.    
import org.zlex.spring.domain.Account;  

10.    
import org.zlex.spring.domain.Account;  

11.    
import org.zlex.spring.service.AccountService;  

11.    
import org.zlex.spring.service.AccountService;  

12.    
  

12.    
  

13.    
/** 

13.    
/** 

14.    
 *  

14.    
 *  

15.    
 * @author <a href=”mailto:zlex.dongliang@gmail.com”>梁栋</a> 

15.    
 * @author <a href=”mailto:zlex.dongliang@gmail.com”>梁栋</a> 

16.    
 * @version 1.0 

16.    
 * @version 1.0 

17.    
 * @since 1.0 

17.    
 * @since 1.0 

18.    
 */  

18.    
 */  

19.    
@Service  

19.    
@Service  

20.    
@Transactional  

20.    
@Transactional  

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图