当前位置: 首页 > 面试题库 >

Spring bean战略模式

姚阳德
2023-03-14
问题内容

假设我使用Spring,我有以下策略…

接口

public interface MealStrategy {
    cook(Meat meat);
}

首要策略

@Component
public class BurgerStrategy  implements
MealStrategy {
  @Autowired CookerDao cookeryDao;

  @Override
  public void cook(Meat meat) {
      cookeryDao.getBurger(meat);
  }
}

下一个策略…

@Component
public class SausageStrategy  implements
MealStrategy {
  @Autowired CookerDao cookeryDao;

  @Override
  public cook(Meat meat) {
      return cookeryDao.getSausage(meat);
  }
}

上下文…

@Component
@Scope("prototype")
public class MealContext {
    private MealStrategy mealStrategy;

    public void setMealStrategy(MealStrategy strategy) {
        this.strategy = strategy;
    }

    public void cookMeal(Meat meat) {
        mealStrategy.cook;
    }
}

现在说这个上下文是通过mvc控制器访问的,例如…

@Autowired
private MealContext mealContext;

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Something makeMeal(Meat meat) {
    mealContext.setMealStrategy(new BurgerStrategy())
    mealContext.cookMeal(meat);
}

上下文应该是一个组成部分吗?当我这样做时,出现一条错误消息说loadOnStartup,正如您所期望的,该策略可能是一个nonUniqueBean。是否所有的bean都需要像上面一样的组件,或者我的注释不正确?

我最大的疑问确实是您可以在Spring
MVC应用程序中使用类似的上下文吗?我使用@Scope(prototype)的问题还在于它意味着策略中的cookeryDao调用会返回空指针,因为Dao不会被注入。

我该如何使用spring来实现上述模式并确保线程安全?我正在尝试的可能吗?


问题答案:

我将使用简单的依赖注入。

@Component("burger")
public class BurgerStrategy implements MealStrategy { ... }

@Component("sausage")
public class SausageStrategy implements MealStrategy { ... }

控制者

选项A:

@Resource(name = "burger")
MealStrategy burger;

@Resource(name = "sausage")
MealStrategy sausage;

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Something makeMeal(Meat meat) {
    burger.cookMeal(meat);
}

选项B:

@Autowired
BeanFactory bf;

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Something makeMeal(Meat meat) {
    bf.getBean("burger", MealStrategy.class).cookMeal(meat);
}

您可以选择创建JSR-330限定词而不是文本名称,以在编译时捕获拼写错误。



 类似资料:
  • 为每个任务实例化具体策略,并在不是时实现“虚拟”策略(如下所示)。代码中到处都有奇怪的可为空的和变量,在本例中... 在不计划任务的情况下具有IPlanningStrategy变量,并且只有当任务“提升”为时才使用具体策略实例化。 备选方案(1)应该是这样的: 现在我看到了不同的**非常重要的**问题。除了algorithm(当然实现该算法的所有任务都共享)之外,我的每个具体策略类还包含附加参数,

  • 在策略模式中,可以在运行时更改类行为或其算法。 这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和根据其策略对象行为不同的上下文对象。 策略对象更改上下文对象的执行算法。 实现 (Implementation) 我们将创建一个Strategy接口,用于定义实现Strategy接口的操作和具体策略类。 Context是一个使用策略的类。 StrategyPatternDem

  • 问题内容: 我一直在阅读有关OCP主体以及如何使用策略模式来实现此目的的信息。 我打算尝试向几个人解释这一点,但是我能想到的唯一示例是根据“订单”的状态使用不同的验证类。 我已经在线阅读了几篇文章,但这些文章通常不会描述使用该策略的真实原因,例如生成报告/账单/验证等。 您是否认为现实世界中有常见的战略模式示例? 问题答案: 你必须加密文件。 对于小文件,可以使用“内存中”策略,其中读取完整的文件

  • 我正在研究一个推荐系统。这将是一个Android应用程序,用户将输入他们的偏好,并在这些偏好的基础上,其他匹配的配置文件将显示给该用户。我正在从用户那里获取数据,并将其存储在Firebase中。 这些是数值,为了向用户显示匹配的配置文件,我使用两种算法来计算用户之间的相似性计数:和 由于这将是一个实时应用程序,所以这种方法是完全错误的,我想实现策略设计模式,其中算法可以在运行时决定,而不是在编译时

  • 问题内容: 我有一个使用Spring框架以Java 1.5开发的Web应用程序。应用程序包含“仪表盘”,这些仪表盘是简单的页面,在其中可以重新组合一堆信息,并且用户可以在其中修改某些状态。经理们希望我在数据库中为这三个仪表板添加一个日志记录系统。每个仪表板都有不同的信息,但是应该通过日期和用户登录来跟踪日志。 我想做的是实现这样的Strategy模式: Appcontext.xml: 因此,在此解

  • 本文向大家介绍Ruby设计模式编程之适配器模式实战攻略,包括了Ruby设计模式编程之适配器模式实战攻略的使用技巧和注意事项,需要的朋友参考一下 适配器模式 适配器模式可以用于对不同的接口进行包装以及提供统一的接口,或者是让某一个对象看起来像是另一个类型的对象。在静态类型的编程语言里,我们经常使用它去满足类型系统的特点,但是在类似Ruby这样的弱类型编程语言里,我们并不需要这么做。尽管如此,它对于我