1、启动类中常用的注解

@ComponentScan

自动扫描组件,可自动发现和装配一些Bean。(如Controller、Service、Component 、Repository 等)

@Configuration

用于定制配置类,相当于spring的xml文件。在类中添加这个注解相当于把这个类做为spring的配置文件中的。如果有些第三方库需要用到xml文件,可通过@Configuration类作为项目的配置主类 。

@EnableAutoConfiguration

尝试根据你添加的jar依赖自动配置你的Spring应用 。通常放在Application类里面。

@SpringBootApplication

包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解的作用。即配置SpringBootApplication后无需再配置上面三个注解,使用三个注解的默认配置。

2、bean的分类标识

@Service

注解在类上,表示这是一个业务层bean。使用方法是在业务实现类上进行注解Service("name") 如@Service("yceqService")public class YceqServiceImpl implements IYceqService {

}

在需要使用该业务的地方则是通过注解Resource的方式获取到这个对象,如在控制层中使用的话,则@Controller @RequestMapping("/yceq")public class YceqConstroller {@Resourceprivate IYceqService yceqService;

}

需要注意的是,Service中定义的name和控制层中定义的名称是一致的。

@Controller

注解在类上,表示这是一个控制层bean。在项目中负责把用户发来的URL请求转发到对应Service层去,这个注解一般与RequestMapping配合使用。如@Controller @RequestMapping("/yceq")public class YceqConstroller {@Resourceprivate IYceqService yceqService;

}

@Repository

注解在类上,表示这是一个数据访问层bean。使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。@Repository("yceqDao")

public interface IYceqDao {   public List getOrgInfo(Map map);   public void insertOrg(Map map);   public void insertDev(Map map);   public List getOrgInfo2(Map map);   public ListgetAll();   public List getOrgCache(String parentserialnumber);

}

要注意的是:这个接口中不可以定义同名的方法,因为会生成相同的id。这个接口不支持重载。

@Component

注解在类上,表示通用bean。无法确定一个bean是属于哪一层(控制层、数据访问层、业务层)的时候使用。使用方法与上述基本一致。

@RestController

等同于Controller和ResponseBody的合集,表示这个类是一个控制器bean(等同于struts中的action),并且函数的返回值直接填入HTTP响应体中。@RestController @RequestMapping(“/demo”)

public class DemoController2 {    @RequestMapping("/test")    public String test(){

//访问 ip:端口/demo/test 会返回字符串ok

return"ok";

}

}

3、bean注入

@Autowired

按类型装配,如果存在多个同一类型的bean,则可以用@Qualifier("name")来指定。如@Autowired @Qualifier(value = “demoInfoService”)

private DemoInfoService demoInfoService;

@Resource

按名称装配。如果只写了@Resource则是通过名称来注入。如果是写成@Resource(name="name",type="type")则通过当作的name来注入。public class YceqConstroller {@Resourceprivate IYceqService yceqService;

}

它默认是通过名称注入的,所以对应的类的注解的名称是一致的,如下@Service("yceqService")public class YceqServiceImpl implements IYceqService {    private static Logger logger = LoggerFactory.getLogger(YceqServiceImpl.class);    @Resource

private IYceqDao yceqDao;

public List getOrgInfo(Map map) {        return yceqDao.getOrgInfo(map);

}

}

4、其他常用注解

@RequestMapping

提供路由信息,负责URL到Controller中的具体函数的映射。 有几个参数配置

(1)、value

指定请求的地址。@RestController @RequestMapping(“/demo”)

public class DemoController2 {    @RequestMapping("/test")    public String test(){

//访问 ip:端口/demo/test 会返回字符串ok

return"ok";

}

}

前端界面用ajax访问的话,代码如下$.ajax({    type : "POST",    url : "demo/test", //映射的地址

data : data,dataType : "text",    success : function(msg) {

alert(msg);

}

(2)、method

请求方法类型 这个不写的话,自适应:get或者post,包含的方法有GET、POST、PUT、DELETE等@RequestMapping("/home")

public class IndexController {

@RequestMapping(method = RequestMethod.GET)

String get() {

return "Hello from get";

}

@RequestMapping(method = RequestMethod.POST)

String getSpring(){

return "spring";

}

}

前端访问的话,需要指定Get和Post才能进行访问//访问的是getSpring的方法$.ajax({    type : "POST",    url : "home",    data : data,    dataType : "text",    success : function(msg) {

alert(msg);

}//访问的是get的方法$.ajax({    type : "GET",    url : "home",

data : data,    dataType : "text",    success : function(msg) {

alert(msg);

}

(3)、onsumes

设置请求内容的类型,application/json、text/html等。 如指定内容的类型为json。则该方法只处理Content-Type为“application/json”类型的请求 。@RequestMapping(value=“/show”,onsumes=”application/json”)String getJson(){

return "spring";

}

(4)、produces

指定返回的内容类型 仅当request请求头中的(Accept)类型中包含该指定类型才返回。@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")

@ResponseBody public Pet getPet(@PathVariable String petId, Model model) {

// implementation omitted }

即指定返回的内容类型为json。

(5)、params

指定request中必须包含某些参数值,只有存在这些参数才能让该方法处理请求。@RequestMapping(value = "/list",method=RequestMethod.GET,params="method=one")

public String getOneUser(@RequestParam(value ="name") String name,Model model) {

Set secures=redisDao.getByName(name);

model.addAttribute("secures", secures);

return "group/list";

}

表示请求的url中需要包括method=one这个参数,才能调用到getOneUser这个方法。

(6)、headers

指定request中必须包含指定的header值。@RestController @RequestMapping("/home")

public class IndexController {

@RequestMapping(value = "/head", headers = { "content-type=text/plain", "content-type=text/html" })

String post() {

return "Mapping applied along with headers";

}

}

这样, post() 方法就能同时接受 text/plain 还有 text/html 的请求了。

@RequestParam

用于获取前端参数。如后端写法@RequestMapping("/")public String Demo1(@RequestParam String orgId){

System.out.println("----"+orgId);

return null;

}

若前端是orgId,而后端是id的话,名称不对应,则可以指定名称,如下@RequestMapping("/")public String Demo1(@RequestParam(value="orgId") String id){

System.out.println("----"+id); return null;

}

也可以给定一个默认值@RequestMapping("/")public String

Demo1(@RequestParam(value="orgId",defaultValue="3501") String id){

System.out.println("----"+id);

return null;

}

可通过添加required来设定参数是否必须传值// required=true,则参数必须要传@RequestMapping("/")public String Demo1(@RequestParam(name="orgId",required=true) int id){

System.out.println("----"+id);

return null;

}

@RequestBody

表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用 。返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。@RequestMapping(“/test”)

@ResponseBody public String test(){

return”ok”;

}

@PathVariable

路径变量。 即在路径中直接使用参数变量进行访问,如RequestMapping(“user/get/mac/{macAddress}”)

public String getByMacAddress(@PathVariable String macAddress){ //do something; }

这个方法需要传入一个macAddress值。假设这个值为100。那么它的访问路径就是http://IP:端口/应用名/user/get/mac/100

扫描指定目录(com.gotop.xyz.*.dao)下的Dao接口,自动生成相应实现类,若接口中已使用到Mapper注解,则无需使用MapperScan注解。使用方法如下@MapperScan("com.gotop.xyz.*.dao")@SpringBootApplicationpublic class HiGotopApplication {    public static void main(String[] args) {

SpringApplication.run(HiGotopApplication.class, args);

}

}

@Mapper

添加了@Mapper注解之后这个接口在编译时会生成相应的实现类,在IDAO接口类中使用。@Repository("yceqDao")

@Mapperpublic interface IYceqDao {    public List getOrgInfo(Map map);    public void insertOrg(Map map);    public void insertDev(Map map);    public List getOrgInfo2(Map map);    public List getAll();    public List getOrgCache(String parentserialnumber);

}

@Transactional

添加事务。不要在接口上声明 @Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。

可以放在类上,也可以放在方法上。放在类上则类中所有方法都有事务。

使用了 @Transactional的方法,对同一个类里面的方法调用, @Transactional无效。比如有一个类Test,它的一个方法A,A再调用Test本类的方法B(不管B是否public还是private),但A没有声明注解事务,而B有。则外部调用A之后,B的事务是不会起作用的。

使用了 @Transactional 的方法, 只能是public, @Transactional注解的方法都是被外部其他类调用才有效,故只能是public。道理和上面的有关联。故在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错,但事务无效。

经过在ICORE-CLAIM中测试,效果如下:抛出受查异常XXXException,事务会回滚。

抛出运行时异常NullPointerException,事务会回滚。

Quartz中,execute直接调用加了@Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)

异步任务中,execute直接调用加了@Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)

在service中加上 @Transactional,如果是action直接调该方法,会回滚,如果是间接调,不会回滚。(即上文3提到的)

在service中的private加上 @Transactional,事务不会回滚。@Transactional(propagation=Propagation.REQUIRED,readOnly=false,isolation=Isolation.DEFAULT)@Service("yceqService")public class YceqServiceImpl implements IYceqService {    private static Logger logger = LoggerFactory.getLogger(YceqServiceImpl.class);    @Resource

private IYceqDao yceqDao;    public List getOrgInfo(Map map) {return yceqDao.getOrgInfo(map);

}

}

作者:Jarvis_Huang

链接:https://www.jianshu.com/p/23577fb613f7

Java注解中produces啥意思_SpringBoot常用注解相关推荐

  1. Java 必须掌握的 12 种 Spring 常用注解

    转载自  Java 必须掌握的 12 种 Spring 常用注解 1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repo ...

  2. Java注解中produces啥意思,produces在@requestMapping中的使用方式和作用

    produces可能不算一个注解,因为什么呢,它是注解@requestMapping注解里面的属性项, 它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码: 还有一个属性与其对 ...

  3. JAX-RS(Java API for RESTful Web Services)常用注解

    为什么80%的码农都做不了架构师?>>>    概述 JAX-RS(Java API for RESTful Web Services)是Java 提供用于开发RESTful Web ...

  4. @autowired注解_SpringBoot常用注解大全

    作者:tanwei81 , 链接:www.cnblogs.com/tanwei81 一.注解(annotations)列表 @SpringBootApplication: 包含了@ComponentS ...

  5. jackson中@JsonProperty、@JsonIgnore等常用注解总结

    最近用的比较多,把json相关的知识点都总结一下,jackjson的注解使用比较频繁, jackson的maven依赖 <dependency> <groupId>com.fa ...

  6. Java 必须掌握的 20+ 种 Spring 常用注解

    阅读文本大概需要 9 分钟. 作者:Java填坑之路 注解本身没有功能的,就和 xml 一样.注解和 xml 都是一种元数据,元数据即解释数据的数据,这就是所谓配置. 本文主要罗列 Spring|Sp ...

  7. Java 必须掌握的 12 种 Spring 常用注解!

    1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller ...

  8. Java注解中produces啥意思,注解@RequestMapping中的produces,consumes属性

    今天在项目中看到了@RequestMapping中有两个属性,consumes和produces,于是就想弄清楚这两个属性是干什么的. 一.produces 指定返回值类型,并且可以设置返回值类型和返 ...

  9. Java注解中produces啥意思_springmvc 没有produces注释,@produces在spring mvc中是什么意思...

    @RequestMapping(value = "/produces", produces = "application/json"):表示将功能处理方法将生产 ...

  10. @configurationproperties注解的使用_SpringBoot常用注解的简单理解

    不定时更新... 文章目录 Spring容器 JavaBean POJO @Autowired @Controller @Resource @RestController @Service @Repo ...

最新文章

  1. 如何调整金格电子章服务器印章_大型集团公司的印章管理方法
  2. 从0梳理1场NLP赛事!
  3. html表格标签模板 实现跨行和跨列
  4. Tableau实战系列浏览 Tableau 环境(一) -初识tableau操作界面
  5. 【Java】6.9 枚举类
  6. Django:序列化的几种方法
  7. kmeans改进 matlab,基于距离函数的改进k―means 算法
  8. leetcode13. 罗马数字转整数
  9. POJ 1252 Euro Efficiency
  10. 美国对特斯拉“幽灵刹车”问题展开调查 涉及41.6万辆Model 3/Y
  11. who I am ?
  12. 老李分享:浏览器引擎的介绍
  13. 国家计算机二级c语言历年真题及答案,全国计算机二级C语言历年真题
  14. cdr多页面排版_CDR文字排版实战图文教程,CorelDRAW文字排版有哪些技巧?
  15. 如何找到刑事案件的辩点(律师角度)
  16. 微信公众测试号授权登录 学习笔记
  17. alps interview
  18. gmail 邮箱附件大小 突破10M
  19. 什么是CISSP(国际注册信息安全认证专家)?
  20. 000001历史数据_上证指数(000001) 的历史行情2000

热门文章

  1. Metricbeat监控Docker进程
  2. android google翻译,在android中施用google翻译
  3. 深入学习USB(10)otg功能介绍
  4. OriginPro 绘制柱状图(特别是用于对比实验时)
  5. html5圆形图片自动旋转,纯CSS3圆形图片鼠标滑过旋转翻盖动画特效
  6. 《SuperMap iDesktop的理论知识》
  7. mysql.sock 路径_关于mysql.sock路径的问题
  8. 拿破仑,技术大牛晋级管理之后的困境
  9. 18. C语言 -- 指针数组和数组指针
  10. Jeff Dean执笔:一文看尽2018谷歌AI重大突破