最近学习java。精通看java入门。在反思部分,突然明白了之前不懂的依赖注入。依赖注入就是通过反射获取对象中需要的参数。下面的类是模仿laravel的实现过程。比较low原创转载请注明出处register=array_merge($this->register,$bind);}}命名空间cpp;使用app\interfaces\RequestInterface;使用app\interfaces\SendSmsInterface;/***Controller*/classUserController{publicfunction__construct(){}publicfunctiontest(RequestInterface$request,SendSmsInterface$sendSmsService){var_dump($request->id);var_dump("这是依赖注入");var_dump($sendSmsService->name);}}命名空间测试;使用bpp\容器;//实例化容器$api=newContainer();//将依赖注册到容器$api->register([\app\interfaces\RequestInterface::class=>\app\Request::class]);$api->注册([\app\interfaces\SendSmsInterface::class=>\app\SendSmsService::class]);//模拟路由$router="cpp\UserController@test";$routers=explode("@",$router);//反射控制器$ref=(new\ReflectionClass($routers[0]));//获取控制器方法中的参数$refs=$ref->getMethod($routers[1])->getParameters();$注入=[];foreach($refsas$re){//获取参数的类$class=$re->getClass()->name;//查询是否注册到容器中if(array_key_exists($class,$api->register)){//在容器中获取注册的方法$class=$api->register[$class];//容易理解$classes=$ref->newInstance();$name=$routers[1];$inject[]=new$class();}else{thrownew\Exception("bug");}}(new$classes())->{$name}(...$inject);如果对你有帮助,请点击关注我的csdnhttps://blog.csdn.net/qq_3496...
