Java项目常用注解总结

1.常用注解及作用

1.1 Spring相关注解

@Autowired、@Resource、@Component

分享一篇关于@Autowired和@Resource非常好的文章:https://www.cnblogs.com/xrq730/p/5313412.html

@Autowired :默认按类型装配,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:

@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用

@Resource :它的作用相当于 @Autowired,只不过** @Autowired 按 byType** 自动注入,面**@Resource 默认按 byName **自动注入,当找不到与名称匹配的bean才会按类型装配

@Controller:用于标注控制层组件

@Service:用于标注业务层组件

@Repository:标注一个DAO组件类

@component: (把普通pojo实例化到spring容器中,相当于配置文件中的 
<bean id="" class=""/>
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

@Autowired + @Qualifier

获取bean,等于@Resource

1.2 SpringBoot相关注解

@SpringBootApplication

包含@Configuration、@EnableAutoConfiguration、@ComponentScan
通常用在启动类上。

@ComponentScan

组件扫描。如果扫描到有@Component @Controller @Service等这些注解的类,则把这些类注册为bean。

@Configuration

指出该类是 Bean 配置的信息源,相当于XML中的<beans></beans>,一般加在主类上。

@EnableAutoConfiguration

让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。

@Slf4j

在类上添加@Slf4j注解,在方法中直接使用log。

@ImportResource

通过locations属性加载对应的xml配置文件,同时需要配合@Configuration注解一起使用,定义为配置类

@EnableScheduling

定时任务注解。

@EnableDiscoveryClient

基于spring-cloud-commons,并且在classpath中实现。

@EnableEurekaClient

基于spring-cloud-netflix,只能为eureka作用。

就是如果选用的注册中心是eureka推荐@EnableEurekaClient,如果是其他的注册中心推荐使用@EnableDiscoveryClient,如果classpath中添加了eureka,则它们的作用是一样的。

@PropertySource

可以知道@Value和@ConfigurationProperties都可以用于获取配置文件的属性值,不过有个细节容易被忽略,那就是,这两个注解在Springboot项目中都是获取默认配置文件的属性值,也就是application.yml或者application.properties的属性值

不过我们想要配属性的话,肯定都不能全都往默认配置文件里堆的,如果想引用其它配置文件的属性值,就可以使用本博客介绍的@PropertySource注解

@EnableEncryptableProperties

用于加密

@EnableTransactionManagement

Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。

关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例。如果你添加的是 spring-boot-starter-data-jpa 依赖,框架会默认注入 JpaTransactionManager 实例。

1.3 SpringMVC相关注解

@EnableWebMvc

在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
@Controller

声明该类为SpringMVC中的Controller
@RequestMapping

用于映射Web请求,包括访问路径和参数(该注解贴在类或方法上)
@ResponseBody

支持将返回值放在response内,而不是一个页面,通常用户返回json数据(该注解贴在返回值旁或方法上)
@RequestBody

允许request的参数在request体中,而不是在直接连接在地址后面。(放在形参前)
@PathVariable

用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
@RestController

该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

1.4 面向切面相关

@Aspect

面向切面编程注解,Spring AOP 中用来自定义切面

@Before

方法前执行

@After

方法后执行

@Around

环绕执行

@Scheduled

执行计划

1.5 Dubbo相关常用注解

@Service

表示提供者

@Reference

表示消费者

@EnableDubbo

启用Dubbo整合配置

1.6 缓存

 @Cacheable

最常用的一个,若缓存中没有对应键,则执行方法,并把返回值放入缓存,如果有则从缓存中取,不执行方法

@CacheEvict

删除缓存

@CachePut

修改缓存

@Caching

同时使用上面多个的时候使用

@CacheConfig

放在类上统一类中的其它缓存注解,如下相当于在这个类中的其它所有缓存注解都被默认加上了cacheNames = "",cacheManager = ""

1.7 @Value

使用@Value可以为属性字段赋值
1、基本数值
2、可以写SpEL; #{}
3、可以写${};取出配置文件【properties】中的值(在运行环境变量里面的值)

配置类
使用@PropertySource读取外部配置文件中的k/v保存到运行的环境变量中;
加载完外部的配置文件以后使用${}取出配置文件的值

@PropertySource(value={"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues {
	
	@Bean
	public Person person(){
		return new Person();
	}

}

bean

 1 public class Person {
 2     @Value("张三")
 3     private String name;
 4 
 5     @Value("#{20-2}")
 6     private Integer age;
 7     
 8     @Value("${person.nickName}")
 9     private String nickName;
10 }

具体详情区别网址https://blog.csdn.net/woheniccc/article/details/79804600

1.8 @ComponentScan

自动扫描指定包下所有使用@Service,@Component,@Controller,@Repository的类并注册
示例:

@ComponentScan(value="com.atguigu",includeFilters = {
        @Filter(type=FilterType.ANNOTATION,classes={Controller.class}),
        @Filter(type=FilterType.ASSIGNABLE_TYPE,classes={BookService.class}),
        @Filter(type=FilterType.CUSTOM,classes={MyTypeFilter.class})
            },useDefaultFilters = false)    
//excludeFilters = Filter[] :指定扫描的时候按照什么规则排除那些组件
//includeFilters = Filter[] :指定扫描的时候只需要包含哪些组件,
需设置useDefaultFilters = false
//FilterType.ANNOTATION:按照注解
//FilterType.ASSIGNABLE_TYPE:按照给定的类型;
//FilterType.ASPECTJ:使用ASPECTJ表达式
//FilterType.REGEX:使用正则指定
//FilterType.CUSTOM:使用自定义规则

 

1.9 @Bean的属性支持

@Scope 设置Spring容器如何新建Bean实例(该注解贴在方法上,得有@Bean)
其设置类型包括:
Singleton (单例,一个Spring容器中只有一个bean实例,默认模式)
Protetype (每次调用新建一个bean)
Request (web项目中,给每个http request新建一个bean)
Session (web项目中,给每个http session新建一个bean)

2.0 事务注解 @Transactional

在 Spring 中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式

编程式事务管理:编程式事务管理使用 TransactionTemplate 或者直接使用底层的 PlatformTransactionManager。对于编程式事务管理,spring 推荐使用 TransactionTemplate。声明式事务管理:建立在 AOP 之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过 @Transactional 就可以进行事务操作,更快捷而且简单。推荐使用

2.1 @Lazy

单实例bean:默认在容器启动的时候创建对象;
懒加载:容器启动不创建对象。第一次使用(获取)Bean创建对象,并初始化;

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/xujiangxi/p/13554600.html