需要聯系的幾個文件:DaosupportController,extents Controller,BeanFactory,CoreDispatcherController,appcontext.xml.
有web.xml中
<servlet>
<!-- servlet獲得控制文件Class的名字,類名 -->
<servlet-name>smvcCoreDispatcher</servlet-name>
<servlet-class>org.bluechant.mvc.core.CoreDispatcherController</servlet-class>
.....
</servlet>
有CoreDispatcherController開始-->

public void invokeActionHandler(ModelAndView mv , HttpServletRequest request) throws Exception
{
String className = mv.getClassName();
String methodName = mv.getMethodName();
//load class
Class controllerClass = cache.loadClass(className);//== Class.forName(className);java反射機制,jvm加載lassName類
Class parentControllerClass = cache.loadClass(baseControllerClass);//class org.bluechant.mvc.controller.Controller
//load method參數1類,創建一個方法為setRequest參數為HttpServletRequest.class的方法與method = clazz.getDeclaredMethod(setRequest, HttpServletRequest.class);與HttpServletRequest的setRequest方法一致的方法.

Method setRequest = cache.loadMethod(parentControllerClass, "setRequest", new Class[]
{ HttpServletRequest.class }); //HttpServletRequest.class,java的反射機制得到自己的類,能夠擁有自己的方法值,(Method setRequest獲取成員函數)

Method setModelAndView = cache.loadMethod(parentControllerClass, "setModelAndView", new Class[]
{ ModelAndView.class });//org.bluechant.mvc.controller.Controller-setModelAndView@6024418 public void org.bluechant.mvc.controller.Controller.setModelAndView(org.bluechant.mvc.controller.ModelAndView)

Method targetMethod = cache.loadMethod(controllerClass, methodName, new Class[]
{});
//buiid controller instance and invoke target method以上setRequest,setModelAndView,targetMethod都放在cache(hashMap中)
Object instance = controllerClass.newInstance();//加載className類;//此方法引入數據庫連接
//以上剛進入頁面的時候instance調用三個類初始化,分別是繼承關系DaosupportController ,controller,和BeanFactory

/**//*--->>>其中DaoSupportController類中protected ObjectDao dao = (ObjectDao)BeanFactory.getBean("objectDao");
--->>>調用:getBean 方法public class BeanFactory {
public static ApplicationContext context = new ClassPathXmlApplicationContext("appcontext.xml") ;//此方法引入數據庫連接 
public static Object getBean(String beanId) {
return context.getBean(beanId);
}
}*/

setRequest.invoke(instance, new Object[]
{ request });//對帶有指定參數的指定對象調用由此 Method 對象表示的基礎方法

setModelAndView.invoke(instance, new Object[]
{ mv });//instance立即為原型指針
// --->>>執行指定的targetMethod方法實則為AccountController的login()登陸方法此時開始調用數據庫

targetMethod.invoke(instance, new Object[]
{});
//調用instance類中targetMethod這個方法,Object[]{}這個作為參數..
//invoke根據實體獲得方法,添加所要造的參數,就是個找實例的方法克隆工廠,由Method獲得實例模型,由方法鍛造樣子,傳入參數得出想要結果
}
}