引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.3</version>
</dependency>
JDK版本:1.8+
Controller
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@SpringBootApplication
@RequestMapping("/")
public class Client {
@Resource
private IFactory factory;
public static void main(String[] args) {
SpringApplication.run(Client.class,args);
}
@RequestMapping("hello")
@ResponseBody
public String hello(){
return factory.getData("策略1","1111");
}
}
Factory interface
public interface IFactory {
String getData(String method,String str);
}
FactoryImpl (关键)
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Service
public class FactoryImpl implements IFactory{
@Resource
private final Map<String,IGuoJianService> map = new ConcurrentHashMap<>();
public FactoryImpl(Map<String,IGuoJianService> map){
this.map.clear();
map.forEach(this.map::put);
}
@Override
public String getData(String method, String str) {
return this.map.get(method).getData(method,str);
}
}
IStrategyService
public interface IStrategyService{
String getData(String methon,String str);
}
StrategyServiceimpl01
import org.springframework.stereotype.Component;
@Component("策略1")
public class StrategyServiceimpl01 implements IGuoJianService{
@Override
public String getData(String methon, String str) {
return "策略1";
}
}
StrategyServiceimpl02
import org.springframework.stereotype.Component;
@Component("策略2")
public class StrategyServiceimpl02 implements IGuoJianService{
@Override
public String getData(String methon, String str) {
return "策略2";
}
}