【SpringBoot 2】(四)详析SpringBoot的常用注解(一)

简介: 【SpringBoot 2】(四)详析SpringBoot的常用注解(一)

向容器注册组件@Bean

       在Spring中向容器中注册一个Bean使用的是applicationContext.xml配置文件中的bean标签,但是SpringBoot中使用的是MyConfig配置类中方法加@Bean注解。这两种方式得到的结果是一样的,只不过是两种不同的编码风格而已。


       单纯的写代码还不行,要想办法让容器知道你想要注册Bean,Spring使用的方法是在web.xml中声明applicationContext.xml配置文件使其中的配置生效,SpringBoot使用的是@Configuration注解向容器中注册,因为配置类其本身而言也是一个组件。


image.png


🚩配置类中使用的注解

@Configuration:向SpringBoot声明这是一个配置类,相当于web.xml里的配置文件声明

@Bean:向容器注册注解下面方法返回值对应的对象,相当于bean标签。@Bean注解还可以使用参数给对象命名,相当于bean标签中的id属性。默认命名为注解下面的方法名


🚩获取指定的组件

       run.getBean()方法

image.png

🚩容器中对象创建模式

       默认为单例模式,也就是在容器中创建好所有的对象,当外部需要获取对象的时候跳过创建步骤直接去容器中拿即可,所以说无论外部调用多少次组件注册方法获取的都是同一个对象。


       当然还可以修改属性proxyBeanMethods(Bean方法代理模式)的值进行单例多例的切换,属性值的改变导致SpringBoot底层拥有两种配置模式:


Full(全配置):proxyBeanMethods为true,单例,判断容器中有没有该对象,有则直接取无则创建

Lite(轻量配置):proxyBeanMethods为false,多例,对象直接创建。相较于全配置的先判断再创建或者获取,Lite直接创建节省了时间,所以被称为是轻量级配置。

       如果存在组件依赖的问题的话,必须采用全配置。所谓的组件依赖就是说在容器中一个组件中的属性是另一个组件或者说使用到了另一个组件,此时就称这个组件依赖于另一个组件。如果采用轻量配置的话,这个组件中的属性将不是另一个组件对象,虽然对象名称都一样但是地址不同。

image.png

注册组件的@Component

@Component:每一层都通用的注解,用于注册组件到容器中,相当于bean标签。缺点就是辨识度不高,无法通过注解理清楚这是哪一层的业务


@Controller:controller层的作用相当于@Component注解


@Service:service层实现类的作用相当于@Component注解


@Repository:mapper层实现类的作用相当于@Component注解


条件装配@Conditional

@Conditional:满足条件就向容器中注册组件

image.png



案例一@ConditionalOnBean:容器中的组件之间存在组件依赖,当被依赖的组件不存在的时候,不向容器中添加另一个组件


image.png


⚠  如果将这个注解放在类上的话, 即是满足条件时类中的所有方法才能生效,否则都不生效。

image.png

⚠  并且在类中的组件注册也是顺序的,使用条件装配注解时会因为注册写在后面就被判断为不满足条件

image.png

案例二@ConditionalOnMissingBean:没有组件时进行装配


相关文章
|
16天前
|
Java Spring 容器
如何解决spring EL注解@Value获取值为null的问题
本文探讨了在使用Spring框架时,如何避免`@Value("${xxx.xxx}")`注解导致值为null的问题。通过具体示例分析了几种常见错误场景,包括类未交给Spring管理、字段被`static`或`final`修饰以及通过`new`而非依赖注入创建对象等,提出了相应的解决方案,并强调了理解框架原理的重要性。
56 4
|
13天前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
50 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
5天前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
9天前
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解
|
11天前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
11天前
|
Java API Spring
springBoot:注解&封装类&异常类&登录实现类 (八)
本文介绍了Spring Boot项目中的一些关键代码片段,包括使用`@PathVariable`绑定路径参数、创建封装类Result和异常处理类GlobalException、定义常量接口Constants、自定义异常ServiceException以及实现用户登录功能。通过这些代码,展示了如何构建RESTful API,处理请求参数,统一返回结果格式,以及全局异常处理等核心功能。
|
17天前
|
Java Spring 容器
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
这篇文章讨论了在Spring Boot 3.2.1版本中,同名同类型的bean和@Service注解类之间冲突的问题得到了解决,之前版本中同名bean会相互覆盖,但不会在启动时报错,而在配置文件中设置`spring.main.allow-bean-definition-overriding=true`可以解决这个问题。
51 0
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
|
22天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
42 2
|
1月前
|
Java Spring 容器
Spring使用异步注解@Async正确姿势
Spring使用异步注解@Async正确姿势,异步任务,spring boot
|
1月前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean