【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:没有组件时进行装配


相关文章
|
3天前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
2天前
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
|
3天前
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
|
3天前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
3天前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
4天前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
13 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
16天前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
43 3
|
17天前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
40 2
|
22天前
|
Java Spring
springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数
springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数
41 7
|
26天前
|
数据库连接 数据库 开发者
Spring问题之使用@Transactional注解时需要注意哪些事项
Spring问题之使用@Transactional注解时需要注意哪些事项