JAVA开发-各种框架常用注解

新人小白,刚接触注解几天,每天都在搜索各种注解的意思,这里根据网上其他的人资料,自己整理了一下各个框架的常用注解,只是最基本的一个概念,没有代码演示例子啥的,有些归类可能不太对,如果有错误还请大家指出来。


一、Spring常用注解大全


注解就相当于XML文件中的<bean id=””class=”/>使用注解就不用去写配置文件,spring这些框架帮我们去写XML配置文件。

5.1组件注解
@Service: 注解在类上,表示这是一个业务逻辑层bean,表示创建这这个类的对象。
@Controller:注解在类上,表示这是一个控制层bean,用来创建处理http请求的对象
@Repository: 注解在类上,表示这是一个数据访问层bean,表示创建这这个类的对象。这几个注解就是标记作用,表示这些类是哪个层而已:service层action层dao层。也是创建这几个类的对象。
@Component: 注解在类上,表示一个普通的bean ,表示创建这这个类的对象。value不写默认就是类名的首字母小写。
这个注解就是标记其他类,比如工具类,表示除了这三层之外的类。
@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。

5.2组件扫描注解
@ComponentScan:注解在类上,组件扫描。告诉spring 哪个packages 的用注解标识的类会被spring自动扫描并且装入bean容器。让spring扫描到Configuration类并把它加入到程序上下文。它会自动扫描指定包下的全部标有 @Component注解的类,并注册成bean,当然包括 @Component下的子注解@Service、@Repository、@Controller。
@ComponentScan 如果不设置basePackage的话 默认会扫描包的所有类,所以最好还是写上basePackage ,减少加载时间。默认扫描**/*.class路径 比如这个注解在com.wuhulala 下面 ,那么会扫描这个包下的所有类还有子包的所有类,比如com.wuhulala.service包的应用。
@WishlyConfiguration 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解。

5.3 bean相关注解
@Scope:注解在类上,描述spring容器如何创建Bean实例。
(1)singleton: 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例
(2)prototype:表示每次获得bean都会生成一个新的对象
(3)request:表示在一次http请求内有效(只适用于web应用)
(4)session:表示在一个用户会话内有效(只适用于web应用)
(5)globalSession:表示在全局会话内有效(只适用于web应用)
在多数情况,我们只会使用singleton和prototype两种scope,如果未指定scope属性,默认为singleton。
该注解和@Component这一类注解联合使用,用于标记该类的作用域,默认singleton。也可以和@Bean一起使用,此时@Scope修饰一个方法。
@DependsOn:该注解也是配合@Component这类注解使用,用于强制初始化其他bean。
@Lazy:指定bean是否延时初始化,相当于 ,默认false。@Lazy可以和@Component这一类注解联合使用修饰类,也可以和@Bean一起使用修饰方法。
5.4 bean(singleton作用域)的生命周期的行为注解
@PostConstruct:修饰方法。用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
@PreDestroy: 修饰方法。被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。
spring用这两个注解管理容器中spring生命周期行为。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。
@Resource:可以修饰成员变量也可以修饰set方法。
@Autowired:注入属性(对象)
@Autowired可以修饰构造器,成员变量,set方法,普通方法。@Autowired默认使用byType方式自动装配。required标记该类型的bean是否时必须的,默认为必须存在(true)。
可以配合@Qualifier(value=“xx”),实现按beanName注入。
required=true(默认),为true时,从spring容器查找和指定类型匹配的bean,匹配不到或匹配多个则抛出异常。当不能确定 Spring 容器中一定拥有某个类的Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false), 这等于告诉Spring:在找不到匹配Bean时也不抛出BeanCreationException 异常。
使用@Qualifier(“xx”),则会从spring容器匹配类型和 id 一致的bean,匹配不到则抛出异常
@Autowired会根据修饰的成员选取不同的类型
修饰成员变量。该类型为成员变量类型
修饰方法,构造器。注入类型为参数的数据类型,当然可以有多个参数
@Autowired可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统一成一个注释类。
理解:在一个类里面注入其他类(注入属性),就可以调用注入的那个类的属性和方法了。
xml方式:
定义属性
set方法
配置文件对象类型注入
注解方式:
定义属性
@AutoWired
使用注解方式就省略了配置文件和set方法,就跟其他基本数据类型的属性一样定义即可。
@Resource: 按名称装配
@Resource和@Autowired的区别:
@Resource需要指定用的是那个对象,@AutoWired会自动去类里面找类的对象
@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配。

5.5 AOP 相关注解
该注解是AspectJ中的注解,并不是spring提供的,所以还需要导入aspectjweaver.jar,aspectjrt.jar,除此之外还需要依赖aopalliance.jar
@Aspect:修饰Java类,指定该类为切面类。当spring容器检测到某个bean被@Aspect修饰时,spring容器不会对该bean做增强处理(bean后处理器增强,代理增强)
@Before:修饰方法,before增强处理。有一个value属性用于指定切入点表达式。用于对目标方法(切入点表达式指定方法)执行前做增强处理。可以用于权限检查,登陆检查
@AfterReturning:修饰方法,afterreturning增强处理。目标方法正常结束后做增强处理
@AfterThrowing:修饰方法,afterthrowing增强处理。当目标程序方法抛出 异常或者异常无法捕获时,做增强处理。
@After:修饰方法 ,after增强处理。无论方法是否正常结束,都会调用该增强处理(@After= @AfterReturning+@AfterThrowing)。一般用于释放资源。
@Arround:修饰方法, around增强处理。该处理可以目标方法执行之前和执行之后织入增强处理,可以看作时@Before和@AfterReturning的总和。
@Pointcut:修饰方法,定义一个切入点,用于被其他增强调用。@Order:当不同的切面中的两个增强处理需要在同一个连接点被织入时,spring aop可以指定不同切面类的增强处理优先级。
5.6 Java配置类相关注解
@Configuration: 注解在类上,表示这是一个IOC容器,被修饰的类相当于一个spring的配置xml文件,相当于 。IOC容器的配置类一般与 @Bean 注解配合使用,用 @Configuration 注解类等价与 xml配置文件中的,用@Bean 注解方法等价于xml配置文件中的。
@Import:修饰Java类,用于向当前配置类导入其他java配置类
@ImportResource:修饰Java类,用于向当前注解类导入xml配置文件
上面两个都是用于配置的导入相当于元素
@Bean:注解在方法上,声明当前方法返回一个Bean。该注解相当于元素
常用的属性:
name:bean id 。name可以省略,省略时name值为方法名。
autowire: 是否自动注入,默认Autowire.NO
initMethod:bean的初始化方法。在依赖注入之后执行
destroyMethod: spring容器关闭时bean调用的方法
当然@Bean还可以配合@Scope指定bean的作用域。
@Value:注解在变量上,为属性注入值。@Value("KaTeX parse error: Expected 'EOF', got '#' at position 89: …操作系统属性:@Value("#̲{systemProperti…{book.name}")String bookName;
注入配置使用方法:
① 编写配置文件(test.properties)
book.name=《三体》
② @PropertySource 加载配置文件(类上)
@PropertySource(“classpath:com/hgs/hello/test/test.propertie”)
注意: @Value不能对 static 属性注入。
@ConfigurationProperties:赋值,将注解转换成对象。给对象赋值。
5.7 环境切换
@Profile:注解在方法或类上,通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境。
@Conditional:根据满足某个特定的条件创建一个特定的Bean。比如,当某一个jar包在一个类路径下时,自动配置一个或者多个Bean。或者只有一个Bean创建时,才会创建另一个Bean。总的来说,就是根据特定条件来控制Bean的创建行为,这样我们可以利用这个特性进行一些自动配置。通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。(方法上)
5.8 异步相关
@EnableAsync:注解在类上,配置类中,通过此注解开启对异步任务的支持。
@Async:注解在类或方法上,在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)。
5.9 Enable注解说明*
这些注解主要用来开启对xxx的支持。
@EnableAspectJAutoProxy:开启对AspectJ自动代理的支持。
@EnableAsync:开启异步方法的支持。
@EnableScheduling:开启计划任务的支持。
@EnableWebMvc:开启Web MVC的配置支持。
@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持。
@EnableJpaRepositories:开启对SpringData JPA Repository的支持。
@EnableTransactionManagement: 开启注解式事务的支持。
@EnableTransactionManagement:开启注解式事务的支持。
@EnableCaching:开启注解式的缓存支持。
@EnableFeignClients:前service服务要调用到其他service服务的api接口时,可通过EnableFeignClients调用其他服务的api。
@EnableAutoConfiguration:启用 Spring 应用程序上下文的自动配置,试图猜测和配置您可能需要的bean。自动配置类通常采用基于你的classpath 和已经定义的 beans 对象进行应用。被 @EnableAutoConfiguration 注解的类所在的包有特定的意义,并且作为默认配置使用。通常推荐将 @EnableAutoConfiguration 配置在 root 包下,这样所有的子包、类都可以被查找到。
5.10 测试相关注解
@RunWith:运行器,Spring中通常用于对JUnit的支持。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration:加载配置ApplicationContext,其中classes属性用来加载配置类。
@ContextConfiguration(classes={TestConfig.class})
**

二、JPA注解

**
@Entity:表明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名。如果想改变这种默认的orm规则,就要使用@Table来改变class名与数据库中表名的映射规则,@Column来改变class中字段名与db中表的字段名的映射规则。
@Table(name=“”):注解在类上表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略
@Column:通过这个注解设置,包含的设置如下
name:数据库表字段名
unique:是否唯一
nullable:是否可以为空
Length:长度
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定义建表时创建此列的DDL
secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
@Column(name = “user_code”, nullable = false, length=32)//设置属性userCode对应的字段为user_code,长度为32,非空
private String userCode;
@Column(name = “user_wages”, nullable = true, precision=12,scale=2)//设置属性wages对应的字段为user_wages,12位数字可保留两位小数,可以为空
private double wages;
@Id:表示该属性为主键。
@Temporal(TemporalType.DATE)//设置为时间类型
private Date joinDate;
@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式
@JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JoinColumn(name=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。
@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一。
@GeneratedValue:用于标注主键的生成策略,通过 strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer 对应 identity,MySQL 对应 auto increment。 在 javax.persistence.GenerationType 中定义了以下几种可供选择的策略:
IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式;

AUTO: JPA自动选择合适的策略,是默认选项;
SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式
TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
**

三、SpringMVC常用注解

**
@RequestMapping:注解在类或方法上,和请求报文做对应的,配置url映射。@RequestMapping(“/path”)表示该控制器处理所有“/path”的UR L请求。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
  a:value:指定请求的实际地址,指定的地址可以是URI Template 模式。
  b:method:指定请求方法类型,这个不写的话,自适应:get或者post。
  c:consumes:指定请求的提交内容类型,如application/json,text/html。
  d:produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
  e: params:指定request中必须包含某些参数值,才让该方法处理请求。
  f:headers:指定request中必须包含指定的header值,才能让该方法处理请求。
g: name 指定映射的名称
@RequestMapping(method = RequestMethod.GET)
@RequestMapping(method = RequestMethod.POST)
@RequestMapping(method = RequestMethod.PUT)
@RequestMapping(method = RequestMethod.DELETE)
当然也可以使用
@GetMapping/@PostMapping/@PutMapping/@DeleteMapping
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)缩写。
其他几个注解依此类推。
@RequestParam:注解在方法的参数前面,获取参数。如:
@RequestParam
String a =request.getParameter(“a”)。
@PathVariable:路径变量,获取参数。如:
RequestMapping(“user/get/mac/{macAddress}”)
public String getByMacAddress(@PathVariable String macAddress){
//do something;
}
两者的作用都是将request里的参数的值绑定到contorl里的方法参数里的,区别在于,URL写法不同。
当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决。例如:
@RequestParam(value=“username”,required=false)
使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值
使用@PathVariable时,URL是这样的:http://host:port/path/参数值
不写的时候也可以获取到参数值,但是必须名称对应。参数可以省略不写。
@RestController :该注解为一个组合注解,结合了 @ResponseBody 和 @Controller,注解在类上,意味着该Controller的所有方法都默认加上了@ResponseBody。原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@Responsebody:支持将返回值放在response内,而不是一个页面,通常用户返回json数据,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上@Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。即将返回结果转换为JSON字符串。
@RequestBody:注解在参数前,表示接收JSON格式字符串参数。允许request的参数在request体中,而不是在直接连接在地址后面。
@EnableWebMvc:在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
@Controller:声明该类为SpringMVC中的Controller。
@ControllerAdvice:包含@Component,可以被扫描到,统一处理异常。通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,这对所有注解了 @RequestMapping的控制器内的方法有效。
@ExceptionHandler:注解在方法上,表示遇到这个异常就执行以下方法。
@InitBinder:用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
@ModelAttribute:本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。
**

四、SpringBoot常用注解

**
@SpringBootApplication:申明让spring boot自动给程序进行必要的配置。@SpringBootApplication=@ComponentScan+@Configuration+@EnableAutoConfiguration:约定优于配置
@JsonBackReference:解决嵌套外链问题。
@RepositoryRestResourcepublic:配合spring-boot-starter-data-rest使用。
@suppresswarnings:抑制警告
@Modifying:如果是增,改,删加上此注解
1:方法的返回值应该是int,表示更新语句所影响的行数。
2:在调用的地方必须加事务,没有事务不能正常执行。@Transactional 事务注解
@Query: 自定义查询语句 JPQL
**

五、lombok常用注解**

@EqualsAndHashCode:实现equals()方法和hashCode()方法
@ToString:实现toString()方法
@Data :注解在类上;提供类所有属性的setter/getter方法,如为final属性,则不会为该属性生成setter方法。此外还提供了equals、canEqual、hashCode、toString 方法
@Setter:注解在属性上;为属性提供 setting 方法
@Getter:注解在属性上;为属性提供 getting 方法
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
@RequiredArgsConstructor:注解在类上;为类提供一个部分参数的构造方法
@Cleanup:关闭流
@Synchronized:对象同步
@SneakyThrows:抛出异常
@Builder:声明实体,表示可以进行Builder方式初始化,它提供在设计数据实体时,对外保持private setter,而对属性的赋值采用Builder的方式,这种方式最优雅,也更符合封装的原则,不对外公开属性的写操作!
**

六、自定义注解的元注解

**
@Target:说明了Annotation所修饰的对象范围。
@Retention:定义了该Annotation被保留的时间长短。
@Documented:用于描述其它类型的annotation应该被作为被标注的程序成员的公共API。
@Inherited:表示某个被标注的类型是被继承的。

七、swagger注解

@Api:协议集描述,用于controller类上,表示标识这个类是swagger的资源
@ApiOperation:协议描述,用在controller的方法上,表示一个http请求的操作
@ApiResponses:Response集,用在controller的方法上
@ApiResponse:Response,用在 @ApiResponses里边
@ApiImplicitParams:用在controller的方法上
@ApiImplicitParam:用在@ApiImplicitParams的方法里边,表示单独的请求参数
@ApiModel:描述返回对象的意义,用在返回对象类上
@ApiModelProperty:用于方法,字段,表示对model属性的说明或者数据操作更改
@ApiParam:用于方法,参数,字段说明,表示对参数的添加元数据(说明或是否必填等)
**

八、Zuul注解

**
@EnableZuulServer:高配版本
@EnableZuulProxy:低配版本
如果不想让高版本多出的过滤器生效,可用低配版本注解。
低配版本注解更适合自定义过滤器,因为经过的过滤器少,性能会比较高。
@EnableZuulProxy简单理解为@EnableZuulServer的增强版,当Zuul与Eureka、Ribbon等组件配合使用时,我们使用@EnableZuulProxy。

猜你喜欢

转载自blog.csdn.net/mrxutada/article/details/90025421