public class StrategyFactory {
private Strategy1 strategy1;
private Strategy2 strategy2;
private Strategy3 strategy3;
@Autowired
public StrategyFactory(Strategy1 strategy1) {
this.strategy1 = strategy1;
}
public StrategyFactory(Strategy2 strategy2) {
this.strategy2 = strategy2;
}
public StrategyFactory(Strategy3 strategy3) {
this.strategy3 = strategy3;
}
public GenericStrategy getTrailerStrategy(String strategy) {
LOGGER.info("Retrieving Strategy Class for {}", strategy);
if (strategy.equals("CLOSE_DETAIL")) {
return strategy1;
}
else if(strategy.equals("LOAD_TRAILER")) {
return strategy2;
}
else if(strategy.equals("CLOSE_SUMMARY")) {
return strategy3;
}
else {
throw new InvalidStrategyTypeException("Invalid Strategy Type");
}
}
}
如何将其他策略实例化?
因为只有用@autowired
注释的构造函数才会得到处理并注入依赖项。Strategy2
和Strategy3
的构造函数被忽略,因为其上没有@Autowired
。
您有两种选择:
(1)改为使用现场注入而不是施工方注入:
public class StrategyFactory {
@Autowired
private Strategy1 strategy1;
@Autowired
private Strategy2 strategy2;
@Autowired
private Strategy3 strategy3;
StrategyFactory(){}
}
public class StrategyFactory {
private List<GenericStrategy> strategy;
@Autowired
public StrategyFactory(List<GenericStrategy> strategy) {
this.strategy = strategy1;
}
public GenericStrategy getTrailerStrategy(String strategy) {
LOGGER.info("Retrieving Strategy Class for {}", strategy);
GenericStrategy result = null;
if (strategy.equals("CLOSE_DETAIL")) {
result = getStrategy(Strategy1.class);
}
else if(strategy.equals("LOAD_TRAILER")) {
result = getStrategy(Strategy2.class);
}
else if(strategy.equals("CLOSE_SUMMARY")) {
result = getStrategy(Strategy3.class);
}
else {
throw new InvalidStrategyTypeException("Invalid Strategy Type");
}
if(result == null){
throw new RuntimeException("Fail to load the strategy....");
}
}
private <T> GenericStrategy getStrategy(Class<T> clazz){
for(GenericStrategy s : strategy){
if(clazz.isInstance(s)){
return s;
}
}
return null;
}
}
项目: el-admin 后台 代码如下 deptService 对象没有用过注解, 为什么还能调用 deptService.download ? 有没有大佬知道这个对象是怎么被实例化的? 完整的 DeptController 代码如下
我试图测试一个@Controller类,其中有来自POJO的列表。我可以在另一个@RESTController类中使用@Autowired来连接控制器,但在同样的情况下,我不能将其用于测试。 user.java UserContrell3.java 在下一个类中,userresource.java我可以做@autowired 但是,在测试类UserTest.java中。我不能: 提前感谢!
我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题
这是我使用SpringBoot的第一天,我试图理解体系结构,因此我开始构建一个hello world应用程序: 在我的pom.xml中,在maven-shade-plugin下,我将mainClass声明如下: 文件目标是src/main/java/com/demo/helloworld.java,该文件中的代码是: 我错过了什么?
我想了解如何在MVC4应用程序中解决统一命名类型注册。 我正在使用“Unity 3.0”和“Unity boostrapper for ASP.NET MVC”。 我知道unity是在DependencyResolver中注册的,所以我可以使用DependencyResolver方法来获取注册类型的实例。 当我想要回一个简单的注册时,这很好。 例如 但是,当我想获取对命名类型注册的引用时,IDep
2020-06-26T09:26:58.880610+00:00Heroku[web.1]:状态从开始更改为>崩溃2020-06-26T12:16:58.291701+00:00Heroku[web.1]:状态从崩溃更改为>开始2020-06-26T12:17:05.611518+00:00Heroku[web.1]:用命令启动进程>2020-06-26T12:17:08.625648+00:00