spring实战笔记(一)

**

Spring实战第四版

**

第2章 装配Bean

声明bean
构造器注入和Set t er方法注入
装配bean
控制bean 的创建和销毁

2.1 Spring配置的可选方案

在XML 中进行显式配置。
在Java中进行显式配置。
隐式的bean 发现机制和自动装配。

尽可能地使用自动配置的机制。显式配置越少越好。

2.2 自动化装配bean

Sprin g 从两个角度来实现自动化装配:
组件扫描(component scanning ):Sprin g 会自动发现应用上下文中所创建的bean 。
自动装配(autowiring ):Spring 自动满足bean 之间的依赖。

@Component组件类 想要被发现的组件 这个简单的注解表明该类会作为组件类,并告知Sprin g 要为这个类创建bean 。

组件扫描:

1.不过,组件扫描默认是不启用的。我们还需要显式配置一下Sprin g ,从而命令它去寻找带有@Component注解的类,并为其创建bean 。
@ComponentScan注解,这个注解能够在Sprin g 中启用组件扫描。@ComponentScan默认会扫描与配置类相同的包。
2. XML 的方案来启用组件扫描 元素会有与@ComponentScan注解相对应的属性和子元素

Bean命名

尽管我们没有明确地为SgtPeppersbean 设置I D,但Sprin g 会根据类名为其指定一个I D。具体来讲,这个bean 所给定的I D为sgtPeppers,也就是将类名的第一个字母变为小写
自己命名:
Sprin g 支持将@Named作为@Component注解的替代方案。两者之间有一些细微的差异,但是在大多数场景中,它们是可以互相替换的。

设置组件扫描的基础包
我们没有为@ComponentScan 设置任何属性。这意味着,按照默认规则,它会以配
置类所在的包作为基础包(basepackage)来扫描组件。
为了指定不同的基础包,你所需要做的就是在@ComponentScan的valu e属性中指明包的名称:

basePackages属性使用的是复数形式 字符串格式 易出错

basePackages属性被替换成了basePackageClasses
为basePackageClasses属性所设置的数组中包含了类。这些类所在的包将会作为组件扫描的基础包。

通过为bean添加注解实现自动装配
自动装配就是让Sprin g 自动满足bean 依赖的一种方法,在满足依赖的过程中,会在Sprin g 应用上下文中寻找匹配某个bean 需求的其他bean 。为了声明要进行自动装配,我们可以借助Sprin g 的@Autowired注解。
它的构造器上添加了@Autowired注解,这表明当Sprin g 创建CDPlayerbean 的时候,会通过这个构造器来进行实例化并且会传入一个可设置给CompactDisc类型的bean 。

@Autowired注解不仅能够用在构造器上,还能用在属性的Set t er方法上。比如说,如果CDPlayer有一个setCompactDisc()方法,那么可以采用如下的注解形式进行自动装配:

@Autowired注解可以用在类的任何方法上。假设CDPlayer类有一个insertDisc()方法,那么@Autowired能够像在setCompactDisc()上那样,发挥完全相同的作用:
不管是构造器、Set t er方法还是其他的方法,Sprin g 都会尝试满足方法参数上所声明的依赖。假如有且只有一个bean 匹配依赖需求的话,那么这个bean 将会被装配进来。
如果没有匹配的bean ,那么在应用上下文创建的时候,Sprin g 会抛出一个异常。为了避免异常的出现,你可以将@Autowired的required属性设置为false:

但是如果没有匹配的bean 的话,Sprin g 将会让这个bean 处于未装配的状态。如果有多个bean 都能满足依赖关系的话,Sprin g 将会抛出一个异常,表明没有明确指定要选择哪个bean 进行自动装配。

2.3 通过Java代码装配bean

尽管在很多场景下通过组件扫描和自动装配实现Sprin g 的自动化配置是更为推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置Sprin g 。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和
@Autowired注解的,因此就不能使用自动化装配的方案了。在这种情况下,你必须要采用显式装配的方式。在进行显式配置的时候,有两种可选方案:Java和XML 。

在进行显式配置时,JavaConfig 是更好的方案,

要在JavaCon f ig 中声明bean,我们需要编写一个方法,这个方法会创建所需类型的实例,然后给这个方法添加@Bean注解。

@Bean注解会告诉Sprin g 这个方法将会返回一个对象,该对象要注册为Sprin g 应用上下文中的bean 。方法体中包含了最终产生bean 实例的逻辑。指定名字:

不管你采用什么方法来为bean 命名,bean 声明都是非常简单的。方法体返回了一个新的SgtPeppers实例。

Sprin g 框架的核心是Sprin g 容器。容器负责管理应用中组件的生命周期,它会创建这些组件并保证它们的依赖能够得到满足,这样的话,组件才能完成预定的任务。我同时建议尽可能使用自动化配置,以避免显式配置所带来的维护成本。但是,如果你确实需要显式配置Sprin g 的话,应该优先选择基于Java的配置,它比基于XML 的配置更加强大、类型安全并且易于重构。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot项目实战笔记可以按照以下步骤进行: 1. 首先,你可以通过观看B站上的教程视频来学习SpringBoot项目实战。在视频中,你可以学习到如何使用SpringBoot、MyBatis和MySQL创建一个电脑商城项目。 2. 确保你的SpringBoot项目能够成功启动。找到被@SpringBootApplication注解修饰的入口启动类,并运行该类。如果你能够观察到图形化的界面,那么说明你的项目成功启动了。 3. 如果你还没有创建SpringBoot项目,你可以使用Spring Initializr来初始化一个新的项目。Spring Initializr是一个Web应用程序,可以为你生成Spring Boot项目的基本结构。你可以选择使用Maven或Gradle作为构建工具,并添加适合你的项目的依赖。然后,你只需要编写应用程序的代码即可。 希望以上信息对你有帮助!如果还有其他问题,请随时提问。123 #### 引用[.reference_title] - *1* *2* [SpringBoot项目实战笔记:电脑商城项目实战SpringBoot+MyBatis+MySQL)](https://blog.csdn.net/weixin_44260350/article/details/127746667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [《SpringBoot实战》读书笔记](https://blog.csdn.net/sanhewuyang/article/details/104494202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值