1.什麼是IOC?:ioc即依賴注入,由spring管理類對象之間的依賴關係,下降編碼形成對象之間的耦合度,使用配置的方式描述依賴關係。ioc容器負責建立,拼接,管理,獲取對象。html
2.什麼是AOP?:aop便是一種面向切面的編程思想,容許進行預編譯的方式或者實如今運行期動態代理來添加某一個功能,可是這種操做不會修改源碼,只會修改編譯後的字節碼。java
3.spring jdbc對傳統的jdbc進行了薄層的封裝,減小了編寫的代碼的重複性,如獲取鏈接等。web
4.在web.xml文件中配置自動啓動spring mvc容器:spring
<context-param> <param-name> contextConfigLocation//配置spring配置文件的位置 </param-name> <param-value> classpath:smart-context.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener//當web容器啓動的時候,自動啓動spring容器 </listener-class> </listener>
spring mvc也擁有一個配置文件,命名規則與web.xml中定義的servlet命名有聯繫,便是servlet名-servlet.xml.如:編程
<servlet> <servlet-name>smart</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>smart</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>
類裝載器的過程:mvc
1.查找和導入calss文件app
2.校驗-class文件數據的正確性。準備-給類靜態變量分配空間。解析-將符號應用轉換成直接應用jvm
3.初始化-對類的靜態變量,靜態代碼塊執行初始化編碼
4.jvm裝載是會產生三個裝載器(根裝載器,擴展裝載器,應用類裝載器)根裝載器負責裝載jre的核心類庫,擴展裝載器負責裝載擴展目錄ext下的jar包,應用加載器負責加載classpath下的類包。這三個加載器分別是繼承關係。url
nosuchmethodmethod錯誤:究其緣由是因爲類加載器的」全局負責委託機制「(當加載一個類時,此類的依賴類也有這個加載器加載,除非顯示指定。委託機制就是先委託父加載器加載,只有再父加載器找不到時,再從本身的classpath下查找加載)引起的:好比兩個一樣的包,版本不一樣,當使用一個包中的方法,可是加載器卻加載了另外一個包,可是加載的那個包並無對應的方法,這是就會拋出此錯誤。
類加載器與反射關係:
package reflect; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class reflecttest { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { ClassLoader loader=Thread.currentThread().getContextClassLoader(); Class classzz=loader.loadClass("reflect.car"); Constructor<car> con=classzz.getDeclaredConstructor((Class[])null); car car1=con.newInstance(); Method settype=classzz.getMethod("setType", String.class); settype.invoke(car1, "阿拉斯加"); Method setage=classzz.getMethod("setAge", int.class); setage.invoke(car1, 113); Method setmaxspeed=classzz.getMethod("setMaxspeed", int.class); setmaxspeed.invoke(car1, 122); car1.say(); } }