當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring入门之一-------实现一个简单的IoC
生活随笔
收集整理的這篇文章主要介紹了
Spring入门之一-------实现一个简单的IoC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、場景模擬
public interface Human {public void goHome();} Human:人類,下班了該回家啦 public interface Car {void start();void stop();void turnLeft();void turnRight();} Car:汽車,可以啟動、停止、左轉、右轉 public class AudiCar implements Car{public void start() {System.out.println(this.getClass().getSimpleName() + ": start !!!");}public void stop() {System.out.println(this.getClass().getSimpleName() + ": stop !!!");}public void turnLeft() {System.out.println(this.getClass().getSimpleName() + ": turnLeft !!!");}public void turnRight() {System.out.println(this.getClass().getSimpleName() + ": turnRight !!!");} } AudiCar:奧迪汽車,實現Car public class BuickCar implements Car{public void start() {System.out.println(this.getClass().getSimpleName() + ": start !!!");}public void stop() {System.out.println(this.getClass().getSimpleName() + ": stop !!!");}public void turnLeft() {System.out.println(this.getClass().getSimpleName() + ": turnLeft !!!");}public void turnRight() {System.out.println(this.getClass().getSimpleName() + ": turnRight !!!");} } BuickCar:別克汽車,實現Car public abstract class HumenWithCar implements Human{protected final Car car;public HumenWithCar(Car car) {this.car = car;}public abstract void goHome();} HumenWithCar有車一族,實現Human,擁有Car屬性 public class Zhang3Human extends HumenWithCar{public Zhang3Human(Car car) {super(car);}public void goHome() {car.start();car.turnLeft();car.stop();} } Zhang3Human:張三,有車一族 public class Li4Human extends HumenWithCar{public Li4Human(Car car) {super(car);}public void goHome() {car.start();car.turnRight();car.stop();} } Li4Human:李四,有車一族二、定義IoC容器
public class IocContrainner {/*** 用來存儲beans,String為bean的id,Object為bean本身*/private final Map<String, Object> beans = new HashMap<String, Object>();/*** 根據beanId獲取一個bean* @param beanId beanId* @return 返回bean*/public Object getBean(String beanId) {return beans.get(beanId);}/*** 委托IoC容器創建一個bean* @param clazz 要創建的bean的class* @param beanId beanId* @param paramBeanIds 要創建的bean的class的構造方法所依賴的bean*/public void registerBean(Class<?> clazz, String beanId, String... paramBeanIds) {Object[] paramValues = new Object[paramBeanIds.length];for (int i = 0; i < paramBeanIds.length; i++) {Object paramValue = getBean(paramBeanIds[i]);if (paramValue == null) {throw new RuntimeException("Can't find bean of id: " + paramBeanIds[i]);}paramValues[i] = paramValue;}Object bean = null;// 獲取并循環所有的構造方法Constructor<?>[] constructors = clazz.getConstructors();for (Constructor<?> constructor : constructors) {try {bean = constructor.newInstance(paramValues);} catch (InstantiationException e) {} catch (IllegalAccessException e) {} catch (InvocationTargetException e) {}}if (bean == null) {throw new RuntimeException("找不到合適的構造方法:" + paramBeanIds);}beans.put(beanId, bean);} }三、測試
public class IocContrainnerTest {private final IocContrainner iocContrainner = new IocContrainner();@Beforepublic void before() {iocContrainner.registerBean(AudiCar.class, "audi");iocContrainner.registerBean(PorscheCar.class, "porsche");iocContrainner.registerBean(BuickCar.class, "buick");iocContrainner.registerBean(Zhang3Human.class, "zhang3", "audi");iocContrainner.registerBean(Li4Human.class, "li4", "porsche");}@Testpublic void test() {Human zhang3 = (Human) iocContrainner.getBean("zhang3");zhang3.goHome();Human li4 = (Human) iocContrainner.getBean("li4");li4.goHome();}}?
轉載于:https://www.cnblogs.com/LOVE0612/p/10044896.html
總結
以上是生活随笔為你收集整理的Spring入门之一-------实现一个简单的IoC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样查看Jdk是32位还是64位
- 下一篇: python - 内置函数