Spring中的设计模式

1、Spring框架中使用的四种最常见的设计模式:

单例模式
工厂方法模式
代理模式
模板模式

2.单例模式
单例模式是一种确保每个应用程序仅存在一个对象实例的机制。在管理共享资源或提供跨领域服务(例如日志记录)时,此模式很有用。

2.1 单例beans
通常,单例对于应用程序是全局唯一的,但是在Spring中,此约束更宽泛。Spring定义的单例是在spring IOC容器中唯一。实际上,这意味着Spring只会为每个应用程序上下文的每种类型创建一个bean。

Spring的方法不同于严格的单例定义,因为一个应用程序可以具有多个Spring容器。因此,如果我们有多个容器,则同一类的多个对象可以在单个应用程序中存在。
在这里插入图片描述
默认情况下,Spring将所有bean创建为单例。

2.2 自动装配单例对象
例如,我们可以在一个应用程序上下文中创建两个控制器,并将相同类型的bean注入每个控制器中。

首先,我们创建一个BookRepository管理我们的Book域对象。

接下来,我们创建LibraryController,它使用BookRepository返回库中的书数:

@RestController

public class LibraryController
 
{
@Autowired
private BookRepository repository;  
@GetMapping
("/count")   
public Long findCount()
{
System.out.println(repository);
return repository.count();
}
}

3.工厂方法模式
工厂方法模式要求工厂类具有用于创建所需对象的抽象方法。通常,我们想基于特定的上下文创建不同的对象。
3.1 Application Context
Spring在其依赖注入(DI)框架的基础上使用了此技术。从根本上讲,Spring将一个bean容器视为生成bean的工厂。因此,Spring将BeanFactory接口定义为Bean容器的抽象:
每个getBean方法均被视为工厂方法,该方法将返回一个与提供给该方法的条件相匹配的bean,例如bean的类型和名称。

然后,Spring使用ApplicationContext接口扩展BeanFactory,该接口引入了其他应用程序配置。Spring使用此配置基于一些外部配置(例如XML文件或Java批注)来启动Bean容器。

然后使用诸如AnnotationConfigApplicationContext之类的ApplicationContext类实现,我们可以通过从BeanFactory接口继承的各种工厂方法来创建bean。

首先,我们创建一个简单的应用程序配置:

4.代理模式
代理在我们的数字世界中是一种方便的工具,我们经常在软件(例如网络代理)之外使用它们。在代码中,代理模式是一种技术,它允许一个对象(代理)控制对另一对象(主题或服务)的访问。
4.1 事务
要创建代理,我们创建一个对象,该对象实现与主体相同的接口,并包含对该主体的引用。

然后,我们可以使用代理代替主体。

在Spring中,代理Bean以控制对基础Bean的访问。我们在使用事务时会看到这种方法:
在我们的BookManager类中,我们使用@Transactional注释对create方法进行注释。该注释指示Spring自动执行我们的create方法。没有代理,Spring将无法控制对我们的BookRepository bean的访问并确保其事务一致性。

4.2 CGLib代理
相反,Spring创建了一个代理,该代理包装了我们的BookRepository bean,并检测了我们的bean以自动执行我们的create方法。

当我们调用BookManager#create方法时,我们可以看到输出:
通常,我们希望看到一个标准的BookRepository对象ID。相反,我们看到了EnhancerBySpringCGLIB对象ID。

在后台,Spring将我们的BookRepository对象包装为EnhancerBySpringCGLIB对象。Spring因此控制对BookRepository对象的访问(确保事务一致性)。

5.模板模式
在许多框架中,大部分代码是样板代码。

例如,在数据库上执行查询时,必须完成相同的一系列步骤:

建立连接

执行查询

执行清理

关闭连接

这些步骤是模板方法模式的理想场景。

5.1 模板和回调
模板方法模式是一种定义某些操作所需的步骤,实现样板步骤并将可自定义步骤保留为抽象的技术。然后,子类可以实现此抽象类,并为缺少的步骤提供具体的实现。

对于数据库查询,我们可以创建一个模板:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值