Spring的存储与获取Bean(下)

简介: Spring的存储与获取Bean(下)

类注解之间的关系


@Component 是 @Controller, @Service, @Repository, @Configuration 的父类

利用方法注解进行存储


方法注解需搭配类注解一同使用

(目的是为了提高效率)

新建一个 Student 类

新建一个 StudentBeans 类

为 getStu() 添加方法注解(@Bean)

为 StudentBeans 添加类注解(@Component)

关于Id


  • 默认情况下 getBean() 对应的 Id 为方法名
  • @Bean 后可以跟 name
  • (例如 @Bean(name = {"s1", "s2"}))
  • 当 @Bean 后添加了 name 时, 所对应的 Id 只能为 name 名, 不允许设置为方法名

默认情况下 getBean() 对应的 Id 为方法名

@Bean 后可以跟 name

🔎Spring—获取Bean


从 Spring 中获取 Bean 也称为对象装配, 对象注入

对象装配(对象注入)的方式可以划分为 3 种

  • 属性注入
  • Set 注入
  • 构造方法注入

属性注入


属性注入的效果等同于赋值

举个栗子🌰

@Autowired
private StudentService studentService;
private int num = 10;

StudentService studentService利用属性注入, 由 Spring 框架赋值

int num未利用属性注入, 由程序员赋值

综上, 再次说明了 Spring 是一个包含众多工具方法的 IOC 容器

(IOC → 控制反转)

属性注入的优点🍂

  • 实现简单

属性注入的缺点🍂

  • 不能注入不可变对象(final 修饰)
  • 只适用于 IOC 容器
  • 更容易违背单一设计原则

不能注入不可变对象(final 修饰)

final 修饰的对象有 2 种赋值方式

  1. 直接赋值
  2. 在构造方法中赋值

只适用于 IOC 容器

@Autowired 来自于 Spring

Spring 是一个包含众多工具方法的 IOC 容器

因此只适用于 IOC 容器

更容易违背单一设计原则

属性注入的方式实现简单

因此也更容易将其他无关的对象一并注入

也就更容易违背单一设计原则

Set注入


Set 注入的优点🍂

  • 更符合单一设计原则

Set 注入的缺点🍂

  • 不能注入不可变对象(final 修饰)
  • 注入的对象可被修改

更符合单一设计原则

Set 注入的实现方式相比于属性注入较复杂

因此相较于属性注入也就避免了将其他无关的对象一并注入的情况

(更符合单一设计原则)

不能注入不可变对象(final 修饰)

final 修饰的对象有 2 种赋值方式

  1. 直接赋值
  2. 在构造方法中赋值

注入的对象可被修改

Set 注入相较于属性注入更危险!

属性注入的对象也可被修改

但 Set 注入除通过属性注入的方式修改注入的对象

也可通过 set() 方法修改注入的对象

set() 方法既可以被 Spring 调用

也可以被其他对象调用

构造方法注入


注意

  1. 当只存在一个构造方法时, @Autowired 可省略
  2. 当存在多个构造方法时, @Autowired 不可省略

构造方法注入的优点🍂

  • 能注入不可变对象(final 修饰)
  • 注入的对象不可被修改
  • final 修饰
  • 构造方法随着类的加载只执行一次
  • 注入的对象会被完全初始化(类加载时就会将对象进行初始化, 当执行其他方法时, 对象已被初始化 → 构造方法的机制)
  • 通用性更好(任何一个类都会有构造方法)

构造方法注入的缺点🍂

  • 实现方式不如属性注入简单

总结(Spring的注入方式? 它们之间的区别?)

@Resource


  • @Resource
  • 可以实现属性注入
  • 可以实现 Set 注入
  • 不可以实现构造方法注入

使用 @Resource 实现属性注入

使用 @Resource 实现 Set 注入

使用 @Resource 不能实现构造方法注入

对比@Resource与@Autowired

来源不同🍭

@Resource

@Autowired

支持参数不同🍭

@Resource

@Autowired

Tips


存在返回同一个类型的多个方法时

利用@Resource(name = "")可以将其进行区分

@Autowired 无法设置 name

只能填写对应的对象

如果想写成 student 形式

需搭配@Qualifier()进行使用, 括号中填写的内容为对应的对象

🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

相关文章
|
11天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
1月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
66 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
2月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
205 24
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
29天前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
2月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
210 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
2月前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
73 1
|
1月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
38 1
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
84 1
|
2月前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean