Spring 注解集
一、声明Bean
1. @Component:表示一个组件,标识为Spring中的Bean,可以作用在任何层次;
2. @Controller
A. 通常作用在控制层,其功能与@Component相同;
B. 组合注解:@RestController,相当于@Controller+@ResponseBody。
3. @Service
A. 通常作用在业务逻辑(Service)层,其功能与@Component相同;
B. 注意是放在实现类上,而非接口,因为接口不能实例化。
4. @Repository:作用在数据访问(Dao)层,其功能与@Component相同。
二、注入Bean
1. @Autowired
A. 由Spring提供,默认按照类型(byType)自动注入,如果没有找到就按照名称(byName)自动注入;
B. 如果查找到多个,则要借助@Qualifier("name")注解匹配其中一个;
C. 用于Bean的字段(可能出现NPE问题)、setter方法和构造方法上,显示地声明依赖;
2. @Inject:由JSR-330提供;
3. @Resource:由JSR-250提供,按照名称(byName)自动注入,如果没有找到就按照类型(byType)自动注入;
4. @Lazy:作用在Spring的组件类上,是为了延迟初始化一个Bean,在第一次使用时才会被创建和初始化;
5. @Qualifier:注解是和@Autowired一起使用的。使用此注解可以让你对注入的过程有更多的控制。@Qualifier可以被用在单个构造器或者方法的参数上。当上下文有几个相同类型的bean, 使用@Autowired则无法区分要绑定的bean,此时可以使用@Qualifier来指定名称;
6. @Required:此注解用于bean的setter方法上。表示此属性是必须的,必须在配置阶段注入,否则会抛出BeanInitializationExcepion。
三、配置类相关
1. @Configuration
A. 声明当前类为配置类,相当于xml形式的Spring配置;
B. 其中内部组合了@Component注解;
C. 组合注解:@WishlyConfiguration,相当于@Configuration+@ComponentScan。
2. @Bean
A. 作用在方法上,声明当前方法的返回值为一个Bean,替代xml中的方式;
B. @Scope:设置Spring容器如何新建Bean实例,方法上得有@Bean。
3. @ComponentScan:用于对@Controller、@Service、@Repository和@Component的组件进行扫描;
另外:@MapperScan:用于扫描Mapper接口的包路径,然后接口在编译之后都会生成相应的实现类;
@Mapper:使单个接口在编译之后生成实现类。
4. @Import
A. 直接导入Configuration配置类;
B. 根据条件选择导入不同的配置类ImportSelector;
C. 动态注册Bean ImportBeanDefinitionRegistrar。
5. @ImportResource:用来导入xml配置文件,比如有些配置用的xml配置;
6. @Value:作用在字段、构造器参数和方法参数上,读取配置文件的值。
四、SpringMVC相关注解
1. @RequestMapping
A. 作用:将HTTP请求映射到MVC和REST控制器的处理方法上;
B. 作用域:类级别或方法级别,其中类上相对于Web根目录,方法上的是相对于类上的路径;
C. 多个URI:可以将多个请求映射到一个方法上,支持通配符和ANT风格的路径;
D. methd属性:表示请求方法,将请求映射到一个特定的方法上,所有的请求默认都会是GET类型的,方法有GET、POST、PUT、DELETE和PATCH;
E. params属性:表示请求参数,可以进一步缩小请求映射的定位范围,即让多个处理方法处理同一个URL请求,而请求的参数是不一样的;
F. headers属性:表示请求头,根据请求头中消息头内容缩小请求映射的范围;
G. produces和consumes属性:配合@ResponseBody使用,也是缩小请求映射的范围;
H. 动态URI:配合@PathVaraible使用,URI中的值可以作为控制器中处理方法的参数,也可以使用正则表达式,占位符使用{};
I. 默认方法:在控制器类中,可以有一个默认的处理方法,即方法上没有请求路径value值;
J. 组合注解:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping和@PatchMapping。
2. @RestController
A. 是一个组合注解,相当于@Controller+@ResponseBody;
B. 注解在类上,表示该Controller的所有方法都默认加上了@ResponseBody。
3. @RequestBody:作用在方法参数前面,表示请求的参数放在对象中,而不是在直接拼接在地址后面;
4. @ResponseBody:作用在方法上,表示将返回值放在response内,而不是一个页面,通常用户返回json数据;
5. @PathVariable:作用在方法参数前面,用于接收路径参数,比如@RequestMapping(“/hello/{id}”),常用在Restful的接口上;
6. @EnableWebMvc:在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置);
7. @ControllerAdvice:通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,
这对所有注解了 @RequestMapping的控制器内的方法有效。
8. @ExceptionHandler:用于全局处理控制器里的异常;
9. @InitBinder:用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中;
10. @ModelAttribute:本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对;
11. @CrossOrigin:支持跨域请求;
12. @RequestParam:用在请求handler方法的参数上,用于将http请求参数的值绑定到参数上;
13. @RequestPart:用在请求handler方法的参数上,用于将文件之类的multipart绑定到参数上;
14. @RequestHeader:用在请求handler方法的参数上,用于将http请求头部的值绑定到参数上;
15. @SessionAttributes:此注解用于type级别,用于将JavaBean对象存储到session中。一般和@ModelAttribute注解一起使用;
16. @SessionAttribute:此注解用于方法的参数上,用于将session中的属性绑定到参数;
17. @RestControllerAdvice:此注解用于class上,同时引入了@ControllerAdvice和@ResponseBody两个注解;
18. @ResponseStatus:此注解用于方法和exception类上,声明此方法或者异常类返回的http状态码。可以在Controller上使用此注解,这样所有的@RequestMapping都会继承;
19. @RequestAttribute:此注解用在请求handler方法的参数上,用于将web请求中的属性(request attributes,是服务器放入的属性值)绑定到方法参数上;
20. @MatrixVariable:此注解使用在请求handler方法的参数上,Spring可以注入matrix url中相关的值。这里的矩阵变量可以出现在url中的任何地方,变量之间用;分隔;
21. @CookieValue:此注解用在@RequestMapping声明的方法的参数上,可以把HTTP cookie中相应名称的cookie绑定上去。
五、@Enable*注解
Enable表示开启/允许一项功能,主要核心的配置就是注解里@Import导入的配置文件
1. @EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
2. @EnableJpaRepositories 开启对SpringData JPA Repository的支持;
3. @EnableCaching:开启注解式的缓存支持。
六、异步任务相关
1. @EnableAsync
A. 一般作用在启动类上,用于开启对异步任务的支持,如果其他地方使用需要配合@Configuration同时使用;
B. 可以自定义线程池;
2. @Async
A. 只能使用到被代理的对象方法上,即代理类的入口方法处,且方法必须是public的,表明这是个异步任务,若是用在类上,那就代表所有方法都是异步执行;
B. 需要使用@EnableAsync开启异步任务;
C. 使用@Async异步注解不能和@Transaction事务注解在同一个方法上同时使用,不然事务注解将无效,要使用事务,需要把事务注解提取到方法里面的子方法上。
七、调度任务相关
1. @EnableScheduling:一般作用在启动类上,用于开启对调度任务的支持,如果其他地方使用需要配合@Configuration同时使用;
2. @Scheduled
A. 作用在方法上,表明这是个调度任务;
B. 需要使用@EnableScheduling开启调度任务;
C. fixedRate——固定频率
corn——自定义执行表达式
八、AOP(切面)相关
1. @EnableAspectJAutoProxy:开启对AspectJ自动代理的AOP支持;
2. @Aspect:声明一个切面,用在类上;
3. @Before:在我们执行目标方法之前运行,指定一个切入点表达式,作用在方法上;
4. @After:在我们目标方法运行结束之后 执行,不管有没有异常,指定一个切入点表达式,作用在方法上;
5. @Around:在我们目标方法运行之前和之后执行,需要手动执行joinPoint.procced(),作用在方法上;
6. @AfterReturning:在我们的目标方法正常返回值后执行,除了指定切入点表达式后,还可以指定一个返回值形参名returning,代表目标方法的返回值;
7. @AfterThrowing:在我们的目标方法出现异常后执行,除了指定切入点表达式后,还可以指定一个throwing的返回值形参名,可以通过该形参名;
8. @PointCut
A. 声明切入点,写切点表达式,用在方法上;
B. 在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持。
九、Profile(环境)相关
1. @Profile:通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境,作用在类或方法上;
2. @Conditional:Spring4中可以使用此注解定义条件话的bean,通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化,用在方法上。
十、数据访问相关
1. @EnableTransactionManagement:开启注解式事务的支持;
2. @Transactional:此注解使用在接口定义、接口中的方法、类定义或者类中的public方法上。需要注意的是此注解并不激活事务行为,它仅仅是一个元数据,会被一些运行时基础设施来消费。
十一、@ConditionalOnx注解
1. @ConditionalOnBean:当容器中有指定Bean的条件下进行实例化;
2. @ConditionalOnMissingBean:当容器里没有指定Bean的条件下进行实例化;
3. @ConditionalOnResource:当类路径下有指定的资源时触发实例化;
4. @ConditionalOnProperty:当指定的属性有指定的值时进行实例化;
5. @ConditionalOnClass:当classpath类路径下有指定类的条件下进行实例化;
6. @ConditionalOnExpression:当表达式为true的时候,才会实例化一个Bean;
十二、其他
1. @PostConstruct:执行初始化的操作,只执行一次,方法执行顺序为:Constructor > @Autowired > @PostConstruct,即在对象加载完、依赖注入后执行;
2. @PreDestroy:在对象消亡前执行的操作,只执行一次。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗