java框架开发中一些常用的注解及解释

	----.@ControllerAdvice:
					可以将对于控制器的全局配置放在同一个位置上,将作用在所有注解了@RequestMapping的控制器的方法上

		----.@Slf4j 日志输出

		----.@ExceptionHundler:
					用于全局处理控制器里的异常

		----.@RestController注解相当于@Controller + @ResponseBody 合在一起的作用。

		----.@RequestMapping是一个用来处理请求地址映射的注解,
					可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

		----.@Autowired 注释,
					它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

		----.@PostMapping 映射一个POST请求 
					{Spring MVC新特性 
						提供了对Restful风格的支持
						@GetMapping,处理get请求 
						@PostMapping,处理post请求 
						@PutMapping,处理put请求 
						@DeleteMapping,处理delete请求}
								
						在@RequestMapping注解中定义URL变量规则

						在@RequestMapping注解方法中获取URL变量-@PathVariable
						@PathVariable指定URL变量名
						@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);
						GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交
						。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。


		----.@PatchMapping   Patch方式是对put方式的一种补充;cfhdojbkjhnklbpkdaibdccddilifddb-3.2-Crx4Chrome.com.crk

						put方式是可以更新.但是更新的是整体.patch是对局部更新;

		----.@SpringBootApplication  springBoot 的核心启动注解

		----.@Date 以往我的做法,
					还会通过快捷方法生成Getter,Setter,equals,hashCode,toString方法。
					但这个类里只声明了变量,没有各种方法,而在类名上加@Data注解,导入依赖:lombok.Data。
					在另一个类中导入该入参类后,通过activityListParam.是可以点出没有写的Get,Set等方法。
					因此,我理解为:@Data注解在类上时,简化java代码编写,为该类提供读写属性,还提供了equals(),hashCode(),toString()方法
		--------------------- 
		----.@ToString 代替实体类中的头tostring方法


		----.@Accessors
					Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,下面介绍三个属性
					fluent
					fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。

					chain
					chain的中文含义是链式的,设置为true,则setter方法返回当前对象。如下

					prefix
					prefix的中文含义是前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。如下

注解方面:

	@Component  
	a.不指定bean的名称,默认为类名首字母小写university

	@Component

	public class University {

      to do sthing...

	}
	b.指定bean的名称

	@Component("university1")

	public class University {

      to do sthing...

	}  
	用在了datacollect 包内

@Value https://blog.csdn.net/hunan961/article/details/79206291
注入普通字符串
注入操作系统属性
注入表达式结果
注入其他Bean属性:注入beanInject对象的属性another
注入文件资源
注入URL资源

@PostConstruct https://blog.csdn.net/qq_37636695/article/details/84791468

	注解说明
	使用注解: @PostConstruct
	效果:在Bean初始化之后(构造方法和@Autowired之后)执行指定操作。经常用在将构造方法中的动作延迟。
	备注:Bean初始化时候的执行顺序: 构造方法 -> @Autowired -> @PostConstruct

JAXB框架框架
@XmlType

该注解用在class类上,常与@XmlRootElement,@XmlAccessorType一起使用。它有三个属性:name、propOrder、namespace,经常使用的只有前两个属性。如:

@XmlRootElement

类级别的注解,对应的是xml文件中的根节点。常与 @XmlType 和 @XmlAccessorType一起使用。如:

@XmlAccessorType

@XmlAccessorType用于指定由java对象生成xml文件时对java对象属性的访问方式。常与@XmlRootElement、@XmlType一起使用。它的属性值是XmlAccessType的4个枚举值,分别为:

XmlAccessType.FIELD:java对象中的所有成员变量;

XmlAccessType.PROPERTY:java对象中所有通过getter/setter方式访问的成员变量;

XmlAccessType.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量;

XmlAccessType.NONE:java对象的所有属性都不映射为xml的元素。

注意:@XmlAccessorType的默认访问级别是XmlAccessType.PUBLIC_MEMBER。因此,如果java对象中的private成员变量设置了public权限的getter/setter方法,就不要在private变量上使用@XmlElement和@XmlAttribute注解,否则在由java对象生成xml时会报同一个属性在java类里存在两次的错误。同理,如果@XmlAccessorType的访问权限为XmlAccessType.NONE,如果在java的成员变量上使用了@XmlElement或@XmlAttribute注解,这些成员变量依然可以映射到xml文件。

@resource
是注入容器提供的资源对象,比如SessionContext MessageDrivenContext。或者你那个name指定的JNDI对象

	可以理解为资源->数据源->也就是数据连接,基本上就是告诉程序数据库在哪里
	@Resource默认按 byName 自动注入,是J2EE提供的
	@Resource有两个中重要的属性:name和type ,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用 byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
	@Resource装配顺序

	(1). 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;
	(2). 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;
	(3). 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
	(4). 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
	@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。

@PersistenceContext
private EntityManager em;
注入的是实体管理器,执行持久化操作的,需要配置文件persistence.xml。

	注入一堆保存实体类状态的数据结构,针对实体类的不同状态(四种,managedh或detached等)可以做出不同的反应(merge,persist等等),其实就是把数据从数据库里提出,然后在内存里处理的,再返回数据库的法则。

@SuppressWarnings

	主要是取消一些编译器产生的Warning级别的告警   https://blog.csdn.net/qgggodlike/article/details/85290385

@Controller
使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面

	若返回json等内容到页面,则需要加@ResponseBody注解

@RequestBody
这里的@RequestBody用于读取Http请求的body部分数据——就是我们的请求数据。比如json或者xml。然后把数据绑定到 controller中方法的参数上,这里就是String json这个入参啦~。

	使用时要注意能不能用@RequestBody把request请求的数据解析,并赋给我们定义的参数上是由请求头的Content-Type的值来决定的。

	当我们用get/post方式提交请求后, Content-Type的值有以下几种,分别对应能不能解析数据如下:

	1.application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理)
	2.multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据)
	3.其他格式(其他格式包括application/json, application/xml等),这些格式的数据,必须使用@RequestBody来处理

	说明:request的body部分的数据编码格式由header部分的Content-Type指定。

@ReponseBody https://blog.csdn.net/Yoga0301/article/details/80640326

	用法:放在controller层的方法上,将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
	使用时机:
	当我们想让页面知道我们返回的数据不是按照html标签的页面来解析,而是其他某种格式的数据解析时(如json、xml等)使用。
	例如:

	@RequestMapping("/getList")
	@ResponseBody
	public Map<String,Object> getStudentList(HtppServletRequest request){
		Map<String,Object> map=new HashMap<String,Object>();
		Dto dto=getParamAsDto(request);
		List li=studentAction.getList(dto.get("age"));
		map.put("studentInfo",li);
	}

	当你不加上@ResponseBody,返回到页面的是String类型的数据。加上这个注解,在页面通过data.studentInfo获取到的就是json格式的,可以取这个json内部的属性值直接。

@InitBinder有什么作用

	springMVC中bean中定义了Date,double,Integer等类型,表单提交的数据(字符串)无法做转换为实体对象的属性,因此需要@InitBinder做数据类型转换

@ModelAttribute

	springmvc的ModelAttribute注解,在controller每个方法执行前被执行  https://blog.csdn.net/he90227/article/details/51538654

@RequestParam

	使用@RequestParm用于绑定controller上的参数,可以是多个参数,也可以是一个Map集合,GET,POST均可
	@RequestParm中name属性是指定参数名,required属性默认为ture,表示必传。若为false则为非必传。属性有defaultValue默认值选项,若该参数为null时,会将默认值填充到参数上

	最后说一下使用@RequestParam的要求

	均支持POST,GET请求
	只支持Content-Type: 为 application/x-www-form-urlencoded编码的内容。Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

@Repository 作用为给bean在容器中命名
MyBatis之@Repository注解
@Repository是Spring框架提供的一种注解,来自如下包
import org.springframework.stereotype.Repository;

	一般在SSM开发中编写MyBatis的DAO接口时使用,如下所示
	在DAO接口中注解了@Repository之后,在Service层才能利用Spring的容器注入
	在这里注意,如果DAO接口上不使用注解的话,是不能在Service中使用@Autowired进行注入的(经过试验之后,
	发现是可以不加@Repository注解的),或者使用配置文件的方式。

@PersistenceContext
private EntityManager em;
注入的是实体管理器,执行持久化操作的,需要配置文件persistence.xml。

	注入一堆保存实体类状态的数据结构,针对实体类的不同状态(四种,managedh或detached等)可以做出不同的反应(merge,persist等等),其实就是把数据从数据库里提出,然后在内存里处理的,再返回数据库的法则。

@Query
spring boot jpa之流式查询 @Query定义查询方法 https://blog.csdn.net/qq_27886997/article/details/82982936

@Query(value=" 这里就是查询语句")

@Query支持hql和原生sql两种方式,默认是hql ,hql就是语句中用的是实体名字和实体属性,原生sql用的表名字和表字段,

方法名字这里可以自己定义

@Transactional
https://blog.csdn.net/nextyu/article/details/78669997

		Transactional的意思是事务性
		@Transactional 表示的是Spring 的事务注解。
		使用方法
		@Transactional(rollbackFor = Exception.class) 当发生异常的情况,回滚

		通过查找资料:
		https://blog.csdn.net/weixin_41485592/article/details/80877665
		这篇文章得出的结论是:
		1.@transactional(rollbackfor = exception.class) 不管检查异常还是非检查异常都会回滚。
		2.@Transactional直接注解下面写方法,默认为RuntimeException时候回滚(也就是说非RuntimeException会造成不回滚)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页