java如何获取类上的注解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何获取类上的注解相关的知识,希望对你有一定的参考价值。
比如某个类上有一个自定义注解我该如何获取这个类的实例和?项目中有很多类要一一遍历吗注解的内容
如何获取类的注解和注解的内容
java 反射Class someClass = Some.getClass();
注解 somtAnnotation = someClass.getAnnotation(注解.class)
属性类型 属性值 = someAnnotation.属性();
要一一遍历么?
这个要根据需求来顶,谁用谁遍历,
参考技术A 注解本身毫无用处,必须要其他程序对于类进行遍历。然后看看该类含不含自己定义的注解。所以注解类一般配合扫描代码一起使用的。只是这些扫描一般放在框架里,你没有意识到而已。 参考技术B
控制层类上的注解业务层的注入URL映射参数接收返回数据及网页模板RESTful
控制类的作用: 处理http的请求,从HTTP请求中获得信息,提取参数,并分发给不同的处理服务,处理之后封装成一个Model ,然后再把该Model返回给对应的View进行展示。
控制层类上的注解
@Controller:创建的类上添加注解@Controller表示这是一个控制层类,返回数据的方式既可以是JSON/xml数据,也可以是页面模板;【用的最多】
@RestController:创建的类上添加注解@Controller表示这是一个控制层类,返回数据的方式只能是JSON/xml数据;
两者的关系: @Controller+@ResponseBody=@RestController
业务层的注入
@Resource:默认byName 注入的方式,适用于接口只能有一个实现类,名称是@Service注解中标定的名称,如果通过 byName 的方式匹配不到,再按 byType 的方式去匹配。如@Resource(name=“companyService”),这里的“companyService”是业务层实现类里面@Service注解中标定的名称。【用的最多】
@Qualifier:byName 注入的方式,但名称是类名,适用于接口有多个实现类的场景,@Qualifier(name=“CompanyService”)
@Autowired: byType 注入方式,要求接口只能有一个实现类,Spring会按 byType的方式寻找接口的实现类,如果有多个实现类,Spring不知道要引入哪个类,自然就会报错。
URL映射
@RequestMapping:表示将特定的URL映射到指定的方法;如:@RequestMapping(“/CompanyModule”)
@GetMapping:只接收Get方式的URL映射,相当于@RequestMapping(value = “/test/hello”,method = RequestMethod.Get)
@PostMapping:只接收Post方式的URL映射,相当于@RequestMapping(value = “/test/hello”,method = RequestMethod.POST)
注意: URL映射中带不带“/”的问题,带不带都行,规范要求来说应该带,不加“/”会去当前路径下找
参数接收
1、JavaBean对象:没有任何注释,直接通过JavaBean对象来封装表单参数或者是请求url路径中的参数,如:public void save(Company company)
@PostMapping("save")
@ResponseBody
public void save(Company company)
/**
* 接收表单,保存公司信息
* 参数接收:JavaBean对象的方式:没有任何注释,直接通过JavaBean对象来封装表单参数或者是请求url路径中的参数,如:public void save(Company company)
* JavaBean对象的方式:一定要在后端有一个实体类才能接收到参数
*/
csi.save(company);
2、@RequestParam:用于获取Request参数,也就是URL中的最后一部分,形如:?xx=yy&zz=ww;
@GetMapping("/delete")
@ResponseBody
public void delete(@RequestParam String uuid)
/**
* 根据接收到的uuid字符串,删除对应的数据库记录
* 参数接收:@RequestParam:用于获取Request参数,也就是URL中的最后一部分,形如:?xx=yy&zz=ww;
* postman测试:http://localhost:8080/CompanyModule/delete?uuid=3416231899607189874
*/
csi.delete(uuid);
3、@RequestBody:直接以String方式接收前端以Post方式传过来的JSON数据,在需要传递大量参数时,很有用,类似于JavaBean对象,差别在于,这种方式传递参数,不需要JavaBean对象来封装参数,适用于多条件查询场景,一般用Map集合来处理接收的参数,如下:public String findAllSimplePageMap(@RequestBody(required = false) Map<String,Object> reqMap)
@PostMapping("/multiQuery")
@ResponseBody
public Map<String,Object> multiQuery(@RequestBody(required = false) Map<String,Object> redMap)
String a1 = redMap.get("a1").toString();
String a2 = redMap.get("a2").toString();
String a3 = redMap.get("a3").toString();
String a4 = redMap.get("a4").toString();
return redMap;
4、@PathVariable:用于获取URL变量:一般 中的变量名与方法中的形参名一致,用于RESTful设计风格;
返回数据及网页模板
@ResponseBody:返回JSON格式的数据,方法上不加该注解,返回的就是templates文件夹下面的网页,如果是返回网页模板,.html后缀可以不带,不过为了明显,建议还是带上.html;
返回公共网页: 如return “redirect:/newdemo.html”;这里的路径默认是指resource资源文件夹下public文件夹下的网页;
返回安全文件夹templates文件夹下的网页: 不区分是Thymeleaf网页模板还是普通网页,如return “mydemo.html”;
RESTful设计风格
特别提醒: 如果不是从资源考虑、对缓存的要求也不高,强烈建议不要采用RESTful风格的设计,至于原因,大家可以考虑有多查询条件的场景处理就明白是有多绕,你不是使用资源进行系统建模,不是以资源的角度来进行设计,自然遇到问题的时候就不会从资源的角度去考虑,最后和REST需要的资源第一位的观点冲突,把自己绕死,这种伪REST其实很要不得。
映射方式除了GetMapping、PostMapping,还有PutMapping、DeleteMapping ,这四种方式的作用如下:
1、PostMapping 用于增删改查的 增
2、GetMapping 用于增删改查的 查
3、PutMapping 用于增删改查的 改
4、DeleteMapping 用于增删改查的 删
提示:在用Post测试RESTful风格的接口时,有别传统的方式,只需注意两点就行
(1)参数的传递形式:不能带参数名称,直接在url后面带参数值就行,如下:
(2)中文转码方式:Postman不能直接传中文值,中文值需要转码,如下
转码成功后,就可以点“Send”了,如下:
以上是关于java如何获取类上的注解的主要内容,如果未能解决你的问题,请参考以下文章