写点什么

总是说 spring 难学?看完这些 spring 的注解及其解释,对你来说就是 So-easy!

用户头像
极客good
关注
发布于: 1 小时前

return "hello";}}

2. @Component、@Repository、@Service、@Controller 作用等价相同的

区别:如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。


用来装配 bean,主要用于标注业务层组件,通过注解的方式将该类加入到 spring 中进行管理。


@Servicepublic interface UserService {User login(String username,String password);}//当把注解写在接口上时,spring 容器会注入失败。


//注解写在类上 注入不会失败。@Servicepublic class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;}


@Controller@RequestMapping("user")public class UserController {


@Autowiredprivate UserService userService}

3. @Autowired

用来装配 bean,可以写在字段上,也可以写在方法上。 默认情况下必须要求依赖对象必须存在,如果要允许 null 值,可以设置它的 required 属性为 false,例如:@Autowired(required=false)

4. @RequestMapping

类定义处:提供初步的请求映射信息,相对于 WEB 应用的根目录。 方法处:提供进一步的细分映射信息,相对于类定义处的 URL。 说白了,就是例如(“user”)网站上访问 localhost:8080/user.html 就可以访问这个方法和 html 页面。

5. @RequestParam

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


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


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


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


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

6. @ModelAttribute

使用地方有三种:


  1. 标记在方法上。


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


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


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


B.在没返回的方法上: 需要手动 model.add 方法


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


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


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


在浏览器中输入访问地址并且加上参数: http://localhost:8081/api/test/mod?name=我是小菜 &age=12


最终输出如下:


1 进入了 1:402 进入了 2:我是小菜 3 进入 mod4 参数接受的数值{name=我是小菜;age=12}5model 传过来的值:{age=40, user_name=我是小菜}


  1. 标记在方法的参数上。


标记在方法的参数上,会将客户端传递过来的参数


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


按名称注入到指定对象中,并且会将这个对象自动加入 ModelMap 中,便于 View 层使用. 我们在上面的类中加入一个方法如下


1@RequestMapping(value="/mod2")2 public Resp mod2(@ModelAttribute("user_name") String user_name,3 @ModelAttribute("name") String name,4 @ModelAttribute("age") Integer age,Model model){5 System.out.println("进入 mod2");6 System.out.println("user_name:"+user_name);7 System.out.println("name:"+name);8 System.out.println("age:"+age);9 System.out.println("model:"+model);10 return Resp.success("1");11 }


在浏览器中输入访问地址并且加上参数: http://localhost:8081/api/test/mod2?name=我是小菜 &age=12 最终输出:


1 进入了 1:402 进入了 2:我是小菜 3 进入 mod24user_name:我是小菜 5name:我是小菜 6age:407model:{user_name=我是小菜,


org.springframework.validation.BindingResult.user_name=org.springframework.validation.BeanPropertyBindingResult: 0 errors, name=我是小菜, org.springframework.validation.BindingResult.name=org.springframework.validation.BeanPropertyBindingResult: 0 errors, age=40, org.springframework.validation.BindingResult.age=org.springframework.validation.BeanPropertyBindingResult: 0 errors} 从结果就能看出,用在方法参数中的 @ModelAttribute 注解,实际上是一种接受参数并且自动放入 Model 对象中,便于使用。

7. @Cacheable

用来标记缓存查询。可用用于方法或者类中, 当标记在一个方法上时表示该方法是支持缓存的, 当标记在一个类上时则表示该类所有的方法都是支持缓存的。 参数列表


@Cacheable(value="UserCache")// 使用了一个缓存名叫 accountCache


public Account getUserAge(int id) {


//这里不用写缓存的逻辑,直接按正常业务逻辑走即可,//缓存通过切面自动切入


int age=getUser(id);


return age;


}

8. @CacheEvict

用来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存。 @CacheEvict(value=”UserCache”) 参数列表

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
总是说spring难学?看完这些spring的注解及其解释,对你来说就是So-easy!