在一个具有(控制器-服务-DAO-实体层)的spring hibernate Java项目中,我使用了抽象工厂模式(抽象类有2个抽象方法)。在实现的抽象工厂模式类中,我有dao方法(运行命名查询)。现在,当请求到达来自另一个服务类的dao的服务impl时,它给出了空指针删除,我已经在服务impl中自动连线了dao类`
AbstractFruitService - [addToBasket() and removeFromBasket()]
|
|- SeasonalFruitsServicsImpl - SeasonalFruitsDAO
|
|- BerryFruitsServiceImpl - BerryFruitsDAO
我不能将@Service(“AbstractFruitService”)添加到SeasonalFruitsServiceSimpl和BerryFruitsServiceImpl中,它会与现有的同名和类的不兼容bean定义发生错误冲突
我不确定spring static/instance factory方法在这种情况下是否有用,我也尝试了这种方法,但没有成功
有什么办法吗
使用注释@transactional(propagation=propagation.requires_new)
对我的代码非常有效,在服务方法中,我添加了这个功能,它工作得很好
您所做的看起来更像是一个服务定位器模式,服务定位器是依赖注入的替代方案。因此,如果您已经在使用IoC spring容器,就没有理由实现一个。
可以将SeasonalFruitsServiceImpl
和BerryFruitsServiceImpl
声明为单独的bean,并使用它们各自的接口SeasonalFruitsDAO
和BerryFruitsDAO
或为它们提供单独的名称(如果需要替换实现,则只需在容器中注册另一个实现)从容器中请求它们的实例。
参见Martin J.Fowler文章
如果服务定位器是由某个第三方提供的,那么您应该创建一个服务定位器实例
<bean id="someServiceLocator" class="com.some3rdparty.ServiceLocator"/>
<bean id="seasonalFruitsDao" factory-bean="someServiceLocator" factory-method="createSeasonalFruitDao"/>
<bean id="berryFruitsDao" factory-bean="someServiceLocator" factory-method="createBerryFruitsDao"/>
或使用Java代码配置
@Configuration
public class someServiceLocatorConfiguration{
@Bean
public ServiceLocator locator(){
return new com.some3rdparty.ServiceLocator();
}
@Bean()
public SeasonalFruitsDao seasonalFruitsDao(){
return locator().createSeasonalFruitDao();
}
@Bean()
public SeasonalFruitsDao seasonalFruitsDao(){
return locator().createSeasonalFruitDao();
}
}
但当然,您永远不应该这样做来实例化您开发的对象。
工厂-创建对象而不向客户机公开实例化逻辑,并通过公共接口引用新创建的对象。是工厂方法的简化版本 工厂方法-定义一个创建对象的接口,但让子类决定实例化哪个类,并通过公共接口引用新创建的对象。 抽象工厂-提供了创建相关对象家族的接口,而无需显式指定它们的类。 null
本文向大家介绍Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】,包括了Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java设计模式之工厂模式。分享给大家供大家参考,具体如下: 一、 简单工厂 先来思考一个问题。我们平时写程序时,会有这种情况,A对象里面需要调用B对象的方法,这时我们使用的一般是new关键字来创建
主要内容:介绍,实现,Shape.java,Rectangle.java,Square.java,Circle.java,Color.java,Red.java,Green.java,Blue.java,AbstractFactory.java,ShapeFactory.java,ColorFactory.java,FactoryProducer.java,AbstractFactoryPatternDemo.java抽象工厂模式(Abstract Factory Pattern)是围绕一个超级
抽象工厂模式 亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。 问题 假设你正在开发一款家具商店模拟器。 你的代码中包括一些类, 用于表示: 1、一系列相关产品, 例如 椅子Chair 、 沙发Sofa和 咖啡桌CoffeeTable 。 2、系列产品的不同变体。 例如, 你可以使用 现代Modern 、
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要
简介 抽象工厂模式是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。 简例 有个