0

我知道当我们使用@Autowiredwith时默认的 bean 范围是单例的@Component

但是如果我们将 JSR-330@Inject与 spring 一起@Component使用(不使用@Scopeor @Singleton)呢?

4

1 回答 1

1

@Inject 或 @Autowired之间没有区别

两个注释的工作方式与 Spring 决定支持一些 JSR-299 注释的方式相同,除了它们自己的注释

注意JSR-299建立在 JSR-330 之上

JSR-299(Java 上下文和依赖注入),以 Gavin King 为主导,使用 JSR-330 作为基础,并通过模块化、横切方面(装饰器、拦截器)、自定义范围或类型安全注入功能显着增强它。JSR-299 位于 JSR-330 之上

默认情况下,所有spring bean都是单例的。@Component

单例 bean 与开创性的四人帮 (GoF) 模式书中定义的单例模式完全不同。GoF Singleton 对对象的范围进行硬编码,这样每个 ClassLoader 将永远创建一个且只有一个特定类的实例。Spring 单例的范围最好按照每个容器和每个 bean 来描述。这意味着如果您在单个 Spring 容器中为特定类定义一个 bean,那么 Spring 容器将创建该 bean 定义所定义的类的一个且只有一个实例。单例范围是 Spring 中的默认范围

于 2020-01-12T06:59:54.537 回答