第一顶层接口:
public interface Animal { public String eat(); }
第二实现具体类:
public class Cat implements Animal { @Override public String eat() { return "创建了猫"; } }
public class Dog implements Animal { @Override public String eat() { return "创建了狗对象"; } }
public class Pig implements Animal { @Override public String eat() { return "创建了猪对象"; } }
第三步工厂类:
import com.demo.service.Animal; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; @Component public class AnimalFactory { @Value("${Cat}") private String Cat; @Value("${Dog}") private String Dog; @Value("${Pig}") private String Pig; public Animal getAnimal(String c){ Animal animal=null; String a=null; if("cat".equals(c)){ a=Cat; }else if("dog".equals(c)){ a=Dog; }else if ("pig".equals(c)){ a=Pig; } if(a!=null){ try { return animal=(Animal) Class.forName(a).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return null; } }
第四步application.properties类路径配置:
Cat=com.demo.service.impl.Cat Dog=com.demo.service.impl.Dog Pig=com.demo.service.impl.Pig
第五步测试:
@Controller @RequestMapping("/dome") public class Dome { @Autowired private AnimalFactory animalFactory; @GetMapping @ResponseBody public String test(String c){ Animal dog = animalFactory.getAnimal(c); return dog.eat(); } }注意要使用spring @value注解必须从spring容器中获取对象,不然拿不到值;