程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Strategy pattern with spring beans大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Strategy pattern with spring beans?

开发过程中遇到Strategy pattern with spring beans的问题如何解决?下面主要结合日常开发的经验,给出你关于Strategy pattern with spring beans的解决方法建议,希望对你解决Strategy pattern with spring beans有所启发或帮助;

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

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

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

Controller

选项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限定词而不是文本名称,以在编译时捕获拼写错误。

由于具体的策略通常是在运行时根据提供的参数左右确定的,因此我建议如下。

@Component
public class BurgerStrategy implements MealStrategy { ... }

@Component
public class SausageStrategy implements MealStrategy { ... }

然后将所有此类策略注入给定控制器中的映射(以bean名称为键)中,并根据需要选择@R_772_11258@策略。

@autowired
Map<String, MealStrategy> mealStrategIEs = new HashMap<>;

@requestMapPing(method=requestMethod.POST)
public @ResponseBody Something makeMeal(@requestParam(value="mealStrategyID") String mealStrategyID, meat meat) {
    mealStrategIEs.get(mealStrategyID).cook(meat);

    ...
}

解决方法

假设我使用Spring,我有以下策略&Hellip;

接口

public interface MealStrategy {
    cook(Meat meat);
}

首要策略

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

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

下一个策略&Hellip;

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

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

上下文&Hellip;

@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控制器访问的,例如&Hellip;

@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)的问题还在于,由于不注入Dao,因此策略中的cookeryDao调用返回空指针。

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

大佬总结

以上是大佬教程为你收集整理的Strategy pattern with spring beans全部内容,希望文章能够帮你解决Strategy pattern with spring beans所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。