β

Spring中注解大全和应用

Harries Blog™ 48 阅读
@Controller @RestController: @Service @Autowired @RequestMapping @RequestParam @ModelAttribute @Cacheable @CacheEvict @Resource @PostConstruct @PreDestroy @Repository @Component @Scope @SessionAttributes @Required @Qualifier

@Controller

标识一个该类是Spring MVC controller 处理器 ,用来创建处理 http 请求的对象.

@Controller
public class TestController {
        @RequestMapping("/test")
        public String test(Map<String,Object> map){

            return "hello";
        }
}

@RestController

Spring4之后加入的注解,原来在@Controller中返回 json 需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再 配置 @ResponseBody,默认返回 js on格式。

@RestController
public class TestController {
        @RequestMapping("/test")
        public String test(Map<String,Object> map){

            return "hello";
        }
}

@Service

用于标注 业务层 组件,说白了就是加入你有一个用注解的方式把这个类注入到 spring 配置中

@Autowired

用来装配 bean ,都可以写在字段上,或者方法上。

默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)

@RequestMapping

类定义处: 提供初步的请求映射信息,相对于 WEB 应用的根 目录

方法处: 提供进一步的细分映射信息,相对于类定义处的 URL。

用过RequestMapping的同学都知道,他有非常多的作用,因此详细的用法

我会在下一篇 文章 专门讲述,请关注公众号哦,以免错过。

@RequestParam

用于将请求 参数 数据 映射到功能处理方法的参数上

例如

public Resp test(@RequestParam Integer id){
        return Resp.success(customerInfoService.fetch(id));
    }

这个id就是要接收从接口传递过来的参数id的值的,如果接口传递过来的参数名和你接收的不一致,也可以如下

public Resp test(@RequestParam(value="course_id") Integer id){
        return Resp.success(customerInfoService.fetch(id));
    }

其中course_id就是接口传递的参数,id就是映射course_id的参数名

@ModelAttribute

使用地方有三种:

1. 标记在方法上。

标记在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动>将该返回值加入到ModelMap中。

A.在有返回的方法上:

当ModelAttribute设置了value,方法返回的值会以这个value为 key ,以参数接受到的值作为value,存入到Model中,如下面的方法执行之后,最终相当于 model.addAttribute("user_name", name);假如 @ModelAttribute没有自定义value,则相当于

model.addAttribute("name", name);

@ModelAttribute(value="user_name")
    public String before2(@RequestParam(required = false) String name, Model model) {
        System.out.println("进入了2:" + name);
        return name;
    }

B.在没返回的方法上:

需要手动model.add方法

@ModelAttribute
    public void before(@RequestParam(required = false) Integer age, Model model) {
        model.addAttribute("age", age);
        System.out.println("进入了1:" + age);
    }

我们在当前类下建一个请求方法:

@RequestMapping(value="/mod")
     public Resp mod(
             @RequestParam(required = false) String name,
             @RequestParam(required = false) Integer age, 
             Model model){
         System.out.println("进入mod");
         System.out.println("参数接受的数值{name="+name+";age="+age+"}");
         System.out.println("model传过来的值:"+model);
         return Resp.success("1");
    }

在浏览器中输入访问地址并且加上参数:

http://localhost:8081/api/test/mod?name=我是小菜&age=12

最终输出如下:

1进入了1:40

2进入了2:我是小菜

3进入mod

4参数接受的数值{name=我是小菜;age=12}

5model传过来的值:{age=40, user_name=我是小菜}

作者:Harries Blog™
追心中的海,逐世界的梦
原文地址:Spring中注解大全和应用, 感谢原作者分享。

发表评论