java連接數(shù)據(jù)庫(第一步)
有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參數(shù)1類,創(chuàng)建一個方法為setRequest參數(shù)為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獲取成員函數(shù))
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類;//此方法引入數(shù)據(jù)庫連接
//以上剛進入頁面的時候instance調(diào)用三個類初始化,分別是繼承關(guān)系DaosupportController ,controller,和BeanFactory
/*--->>>其中DaoSupportController類中protected ObjectDao dao = (ObjectDao)BeanFactory.getBean("objectDao");
--->>>調(diào)用:getBean 方法public class BeanFactory {
public static ApplicationContext context = new ClassPathXmlApplicationContext("appcontext.xml") ;//此方法引入數(shù)據(jù)庫連接
public static Object getBean(String beanId) {
return context.getBean(beanId);
}
}*/
setRequest.invoke(instance, new Object[] { request });//對帶有指定參數(shù)的指定對象調(diào)用由此 Method 對象表示的基礎(chǔ)方法
setModelAndView.invoke(instance, new Object[] { mv });//instance立即為原型指針
// --->>>執(zhí)行指定的targetMethod方法實則為AccountController的login()登陸方法此時開始調(diào)用數(shù)據(jù)庫
targetMethod.invoke(instance, new Object[]{});
//調(diào)用instance類中targetMethod這個方法,Object[]{}這個作為參數(shù)..
//invoke根據(jù)實體獲得方法,添加所要造的參數(shù),就是個找實例的方法克隆工廠,由Method獲得實例模型,由方法鍛造樣子,傳入?yún)?shù)得出想要結(jié)果
}
}
posted on 2012-05-24 16:49 youngturk 閱讀(199) 評論(0) 編輯 收藏 所屬分類: Java基礎(chǔ) 、web.xml解析 、java連接數(shù)據(jù)庫解析