Spring与简单工厂模式的结合
Factory----@Component----create1/2Tool
BaseTool----接口或抽象类
ToolOne----继承或实现BaseTool
ToolTwo----继承或实现BaseTool
ConstUtil----属性注入类–@Component
主要思想:基于Annotation仅装配工厂bean
@Component
public class ToolFactory {
public BaseTool createOneTool(){
return new ToolOne();
}
public BaseTool createTwoTool(){
return new ToolTwo();
}
}
public abstract class BaseTool{
private void print(String str){
System.out.println(str);
}
public void majorAct(String str){
print(str);
}
}
public class ToolOne extends BaseTool {
@Override
public void majorAct(String str) {
super.majorAct(str + ConstUtil.getOneToolName());
}
}
public class ToolTwo extends BaseTool{
@Override
public void majorAct(String str) {
super.majorAct(str+ ConstUtil.getTwoToolName());
}
}
@Service
public class Services {
@Autowired
private ToolFactory toolFactory;
public BaseTool getTool(String toolType){
switch (toolType){
case "1":
return this.toolFactory.createOneTool();
case "2":
return this.toolFactory.createTwoTool();
default:
return null;
}
}
}
@RestController
@RequestMapping(value = “/spsf”)
public class Controller {
@Autowired
private Services services;
@RequestMapping(value = "/t1", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
public String test(String toolType){
BaseTool baseTool = this.services.getTool(toolType);
baseTool.majorAct("白日依山尽:");
return "666";
}
}
@Component
public class ConstUtil {
private static String oneToolName;
public static String getOneToolName(){
return oneToolName;
}
@Value("${one.tool.name}")
public void setOneToolName(String oneToolName){
this.oneToolName = oneToolName;
}
private static String twoToolName;
public static String getTwoToolName() {
return twoToolName;
}
@Value("${two.tool.name}")
public void setTwoToolName(String twoToolName) {
this.twoToolName = twoToolName;
}
}