• Java面试大厂名企高频真题--Spring 注解


    要求

    掌握 Spring 常见注解

    提示

    注解的详细列表请参考:面试题-spring-注解.xmind

    下面列出了视频中重点提及的注解,考虑到大部分注解同学们已经比较熟悉了,仅对个别的作简要说明

     原图太大,放不上来,有需要的同学可以留言

    事务注解

    1、@EnableTransactionManagement,会额外加载 4 个 bean

        BeanFactoryTransactionAttributeSourceAdvisor 事务切面类

       TransactionAttributeSource 用来解析事务属性

       TransactionInterceptor 事务拦截器

       TransactionalEventListenerFactory 事务监听器工厂

    2、@Transactional

    核心

    @Order

    切面

    @EnableAspectJAutoProxy

      会加载 AnnotationAwareAspectJAutoProxyCreator,它是一个 bean 后处理器,用来创建代理

      如果没有配置 @EnableAspectJAutoProxy,又需要用到代理(如事务)则会使用 InfrastructureAdvisorAutoProxyCreator 这个 bean 后处理器

    组件扫描与配置类/

    1、@Component

    2、@Controller/

    3、@Service

    4、@Repository/

    5、@ComponentScan

    6、@Conditional/

    7、@Configuration

    配置类其实相当于一个工厂, 标注 @Bean 注解的方法相当于工厂方法

    @Bean 不支持方法重载, 如果有多个重载方法, 仅有一个能入选为工厂方法

    @Configuration 默认会为标注的类生成代理, 其目的是保证 @Bean 方法相互调用时, 仍然能保证其单例特性

    @Configuration 中如果含有 BeanFactory 后处理器, 则实例工厂方法会导致 MyConfig 提前创建, 造成其依赖注入失败,解决方法是改用静态工厂方法或直接为 @Bean 的方法参数依赖注入, 针对 Mapper 扫描可以改用注解方式

    @Bean

    @Import

    四种用法

    ① 引入单个 bean

    ② 引入一个配置类

    ③ 通过 Selector 引入多个类

    ④ 通过 beanDefinition 注册器

    解析规则

    同一配置类中, @Import 先解析 @Bean 后解析

    同名定义, 默认后面解析的会覆盖前面解析的

    不允许覆盖的情况下, 如何能够让 MyConfig(主配置类) 的配置优先? (虽然覆盖方式能解决)

    采用 DeferredImportSelector,因为它最后工作, 可以简单认为先解析 @Bean, 再 Import

    @Lazy

    加在类上,表示此类延迟实例化、初始化

    加在方法参数上,此参数会以代理方式注入

    @PropertySource

    依赖注入

    @Autowired

    @Qualifier

    @Value

    mvc mapping

    @RequestMapping,可以派生多个注解如 @GetMapping 等

    mvc rest

    @RequestBody

    @ResponseBody,组合 @Controller => @RestController

    @ResponseStatus

    mvc 统一处理

    @ControllerAdvice,组合 @ResponseBody => @RestControllerAdvice

    @ExceptionHandler

    mvc 参数

    @PathVariable

    mvc ajax

    @CrossOrigin

    boot auto

    @SpringBootApplication

    @EnableAutoConfiguration

    @SpringBootConfiguration

    boot condition

    @ConditionalOnClass,classpath 下存在某个 class 时,条件才成立

    @ConditionalOnMissingBean,beanFactory 内不存在某个 bean 时,条件才成立

    @ConditionalOnProperty,配置文件中存在某个 property(键、值)时,条件才成立

    boot properties

    @ConfigurationProperties,会将当前 bean 的属性与配置文件中的键值进行绑定

    @EnableConfigurationProperties,会添加两个较为重要的 bean

    ConfigurationPropertiesBindingPostProcessor,bean 后处理器,在 bean 初始化前调用下面的 binder

    ConfigurationPropertiesBinder,真正执行绑定操作

  • 相关阅读:
    使用 docker buildx 构建跨平台镜像 (QEMU/buildx/build)
    (服务器&客户端)网络通信是怎么实现的?7000字爆肝----原来java网络编程技术功不可没(多线程,URL,InetAddressm,TCP,UDP)集结
    自动驾驶中的SLAM
    docker基本管理
    复习计算机网络——第二章记录(1)
    vue3 +elementplus | vue2+elementui 动态地通过验证规则子新增或删除单个表单字段
    干货必看|Spring Boot整合MyBatis框架详解
    Spring Boot Admin2 @EnableAdminServer的加载
    C_C++在linux和windows下文件操作比较总结
    QT之QLineEdit的用法
  • 原文地址:https://blog.csdn.net/JACK_SUJAVA/article/details/127734094