单例模式(基于spring来说明)

本文探讨了Spring框架如何利用单例模式进行依赖注入,强调单例模式确保类的唯一性和全局访问性。在面试中,Spring的单例模式常被提及,因为它构成了Spring依赖注入的基础。通过单例,Spring能够有效地管理并提供对象实例,简化了代码维护和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很喜欢在夜深人静的写点东西,不管是看代码还是看点技术的书,看完就想简单的写写自己的理解。ok,话不多说,直接重点。

单例模式

首先,面试中经常问到的一个问题是,Spring用到了哪些模式,回复一般都是基于单例模式、工厂模式等等,下面我们慢慢聊,先从单例模式开始。
Spring依赖注入都是基于单例模式进行的,单例重点是唯一性,确保某一个类中只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类就是称为单例类,提供了全局访问的方法。单例模式是对象创建型模式。

### 如何在Spring中注入单例模式的Bean #### 使用XML配置文件定义Bean 通过配置文件声明一个具有`scope="singleton"`属性的Bean,这使得该Bean成为默认情况下唯一的实。每当应用程序上下文中请求此Bean时,都将返回相同的对象实。 ```xml <bean id="exampleSingleton" class="com.example.SingletonExample" scope="singleton"/> ``` 上述代码片段展示了如何利用XML配置来注册一个名为`exampleSingleton`的Bean[^3]。 #### 注解驱动下的组件扫描自动装配 另一种方法是在Java类上应用特定注解并启用组件扫描功能,从而让Spring能够识别这些带有注解的类作为候选者加入IoC容器管理之中。通常使用的注解包括但不限于: - `@Component`: 将普通的POJO标记为Spring Bean。 - `@Service`, `@Repository`, 或 `@Controller`: 这些都是特殊的`@Component`变体,用于区分不同层次的服务逻辑层、数据访问层以及表现层组件。 为了确保此类Bean是以形式存在的,默认行为即如此;除非特别指定了其他作用域范围,则无需额外指定任何参数即可满足需求。 ```java import org.springframework.stereotype.Component; @Component public class SingletonExample { private static final String DESCRIPTION = "This is a singleton bean."; public String getDescription() { return DESCRIPTION; } } ``` 这段示表明了一个简服务类被标注成Spring管理下的Bean[^1]。 #### 编程式风格创建Bean 除了依赖于元数据描述外,还可以采用编程手段直接操作ApplicationContext API完成相同目的的操作。下面给出了一种基于AnnotationConfigApplicationContext的方式加载含有@Configuration修饰符的类,并从中获取所需Bean的方法。 ```java import org.springframework.context.annotation.AnnotationConfigApplicationContext; // ... other imports ... public class MainApp { public static void main(String[] args) { try (var context = new AnnotationConfigApplicationContext(AppConfig.class)) { var exampleSingleton = context.getBean(SingletonExample.class); System.out.println(exampleSingleton.getDescription()); } } } class AppConfig { @Bean(name = "exampleSingleton") public SingletonExample createSingletonExample() { return new SingletonExample(); } } ``` 在此子中,`createSingletonExample()` 方法负责构建目标Bean并将它交给Spring IoC容器处理,由于未显式设置作用域选项,默认就是单例模式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值