常见注解拷打
热门题目
- @Autowired和@Resource的区别
- @Component和@Bean的区别
- 其他常用注解说明
见招拆招
1、@Autowired和@Resource的区别
两者都是依赖注入的注解,@Autowired 是 Spring 提供的,@Resource 是 JavaEE 提供的。@Autowired 主要是按类型注入,如果存在多个实现类的时候,可以配合 @Qualifier 来进行指定。@Resource 是按名称注入的,找不到的话,会按照类型进行注入。我一般在开发中使用较多的就是 @Resourse。
2、@Component和@Bean的区别
它们都可以将类注册到容器,区别的话,@Component 需要配合 @ComponentScan 注解使用,Spring 会自动扫描指定包及其子包中的所有类,找到带有 @Component 注解的类,并将它们注册为 Bean;@Bean 标记在方法上,方法所在的类需要用 @Configuration 注解进行标记,这个不需要扫描,会自动注入到 Spring 容器中。
3、其他常用注解说明
这里主要列举一些常见注解的作用,了解一下即可:
- @Controller、@Component、@Repository和@Service
本质上没有什么区别,都是 @Component 的衍生注解,只是表示的语义化不同而已,比如说 @Controller 用于标记控制器层的类,@Service 用于标记业务层的类等等。
@Primary
存在多个实现类的时候,@Primary 可以提高注入的优先级
@Value
一般来说,都是用来注入外部配置文件的配置信息的。
@Profile
根据当前的启动环境,来决定是否加载被注解的 Bean。
@PostConstruct 和 @PreDestroy
用于注解某个 Bean 的生命周期钩子函数的,被 @PostConstruct 标记的方法,在 Bean 完成初始化后调用;被 @PreDestroy 标记的方法,在 Bean 销毁之前调用。
@RequestBody 和 @ResponseBody
@RequestBody 用于标记请求体对象,Spring 会自动进行请求体到 Java 对象的转化工作;
@ResponseBody 用来标记方法,会将方法的返回值写入响应体中。
@PathVariable
用于提取路径参数值的
@ModelAttribute
将请求的 query 或者 表单字段 注入到 Java 对象
@ExceptionHandler
处理指定类型的异常信息返回
@RequestHeader 和 @CookieValue
前者用于提起请求头中的字段值,后者提取 cookie 的值
@SessionAttribute
获取当前会话对象的某个参数的
@Validated 和 @Valid
给面试官说,我只了解它们可以用来做字段校验,自己平时的开发基本上没有用过。
@Scheduled
可以将某个方法标记为一个定时任务,一般搭配
corn
表达式使用@Cacheable 和 @CacheEvict
给面试官这样说,平时没有用过,只是了解可以标记方法,然后缓存方法的返回值,后者的话就是删除缓存项的,平时做本地缓存的话,用 Guava 或者 Caffeine 多一点。
@Conditional
根据条件,决定是否将 Bean 放入 Spring 容器。
@Lazy
和 @Component 或者 @Bean 搭配使用时,可以延迟 Bean 的创建时机;
和 @Autowired 搭配使用时,Spring 将注入一个代理类。
@PropertySource
从外部文件中加载配置,注入到 Spring 上下文环境中。
@EventListener
监听特定事件,当事件发生时,执行被该注解标记的方法,也可以叫做回调函数。
多看看就好了,有个印象。
2025/01/08
writeBy kaiven