java - Spring中的策略模式和依赖注入(inject)

标签 java spring spring-mvc

我有一个Strategy 接口(interface),由StrategyAStrategyB 实现,它们都定义为@Component 并且它们也有一个 @Autowired 属性,我怎样才能根据字符串值获取其中一个的实例?

这是我的 Controller 的 Action ,应该执行策略:

@RequestMapping("/blabla")
public void perform (@RequestParam String strategyName) {
    Strategy strategy = (Strategy) /* Get the concrete Strategy based on strategyName */;
    strategy.doStuff ();
}

谢谢!

最佳答案

您可以通过编程方式查找它:

private @Autowired BeanFactory beanFactory;

@RequestMapping("/blabla")
public void perform (@RequestParam String strategyName) {
    Strategy strategy = beanFactory.getBean(strategyName, Strategy.class);
    strategy.doStuff();
}

您可以使用自定义 WebArgumentResolver 以更奇特的方式来完成它,但这比它的值(value)要麻烦得多。

关于java - Spring中的策略模式和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794060/

相关文章:

java.sql.SQLException : Access denied for user 'root' @'localhost' (using password: YES) in spring using mysql

java - Spring中使用@Async和@Scheduled时检测线程状态

java - 在 Spring Boot 中为 @WebMvcTest 禁用 Spring Security 配置类

java - Android:Android Studio 与 Eclipse

java - 创建自定义注释作为框架注释的别名?

java - 如果一个实例同时显示在 Autowiring 和 bean 中,Spring 将使用哪一个

java - 启用csrf时,angularjs和spring security给出405错误

java - JSF : how to force creating a new managed bean instance for every browse instance

java - 如何使用 Intellij Idea 的异常断点

java - 用于 Servlet 3.0 的 MultipartResolver 的 Spring 4 Java 配置