一、Ioc 通過Spring配置來創建對象,而不是new的方式
兩種方法:配置文件,註解
1.Ioc底層原理
(1)xml配置文件
(2)dom4j解析
(3)工廠設計模式
(4)反射
步驟:
第一步:創建類的.xml文件
<code><bean>/<code>
第二步:創建一個工廠類:使用dom4j解析配置文件+反射
<code>第二步:創建一個工廠類:使用dom4j解析配置文件+反射
public class UserFactory{
public static UserService getUserService(){
//使用dom4j解析配置文件
//根據id值獲得class的屬性值
String classValue="class屬性值";
//使用反射來創建class對象
Class class=Class.forName(classValue);
UserService service=class.newInstatnce();
return service;
}
} public class UserFactory{
public static UserService getUserService(){
//使用dom4j解析配置文件
//根據id值獲得class的屬性值
String classValue="class屬性值";
//使用反射來創建class對象
Class class=Class.forName(classValue);
UserService service=class.newInstatnce();
return service;
}
} /<code>
通過IOC,我們如果改掉UserService類,只需更改bean裡面的配置屬性就行了,降低了類之間的耦合度
2.Ioc和DI的區別:
(1)Ioc:控制反轉,把創建對象交給Spring進行配置
(2)DI:依賴注入,向類裡面的屬性中設置值
(3)二者關係:DI不能單獨存在,要在Ioc基礎之上來完成操作,即要先創建對象才能注入屬性值。
3.Spring整合web項目原理
(1)加載Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加載文件要new一個對象,每次訪問都要new對象加載配置,效率低
(2)實現思想:吧加載配置文件和創建對象過程,在服務器啟動時候完成
(3)實現原理:
a) ServletContext對象
b) 監聽器(ServletContextListener接口)
c) 具體使用:
i. 服務器啟動時,為每個項目創建一個ServletContext對象
ii. 使用監聽器可以監聽到ServletContext在何時創建
iii. 在監聽器的,ServletContextListener接口的contextInitialized()方法方法中加載Spring配置文件(括號1中代碼),創建對象。
iv. 把創建出來的對象放到ServletContext域對象裡面(setAttribute方法)
3.Spring整合web項目原理
(1)加載Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加載文件要new一個對象,每次訪問都要new對象加載配置,效率低
(2)實現思想:吧加載配置文件和創建對象過程,在服務器啟動時候完成
(3)實現原理:
a) ServletContext對象
b) 監聽器(ServletContextListener接口)
c) 具體使用:
i. 服務器啟動時,為每個項目創建一個ServletContext對象
ii. 使用監聽器可以監聽到ServletContext在何時創建
iii. 在監聽器的,ServletContextListener接口的contextInitialized()方法方法中加載Spring配置文件(括號1中代碼),創建對象。
iv. 把創建出來的對象放到ServletContext域對象裡面(setAttribute方法)
v. 獲取對象時,從ServletContext域對象中得到(getAttribute方法)
二、Aop:面向切面,擴展功能時不通過源代碼,橫向抽取機制。
底層使用動態代理方式---增強方法
具體分兩種情況:
(1)有接口的情況:創建接口的實現類的代理對象,jdk動態代理
SpringIoc和Aop底層原理
欣然
java架構交流群:473984645
1 人贊同了該文章
一、Ioc 通過Spring配置來創建對象,而不是new的方式
兩種方法:配置文件,註解
JAVA高級進階zhuanlan.zhihu.com
1.Ioc底層原理
(1)xml配置文件
(2)dom4j解析
(3)工廠設計模式
(4)反射
步驟:
第一步:創建類的.xml文件
<code><bean>/<code>
第二步:創建一個工廠類:使用dom4j解析配置文件+反射
<code>public class UserFactory{
public static UserService getUserService(){
//使用dom4j解析配置文件
//根據id值獲得class的屬性值
String classValue="class屬性值";
//使用反射來創建class對象
Class class=Class.forName(classValue);
UserService service=class.newInstatnce();
return service;
}
} /<code>
通過IOC,我們如果改掉UserService類,只需更改bean裡面的配置屬性就行了,降低了類之間的耦合度
2.Ioc和DI的區別:
(1)Ioc:控制反轉,把創建對象交給Spring進行配置
(2)DI:依賴注入,向類裡面的屬性中設置值
(3)二者關係:DI不能單獨存在,要在Ioc基礎之上來完成操作,即要先創建對象才能注入屬性值。
3.Spring整合web項目原理
(1)加載Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加載文件要new一個對象,每次訪問都要new對象加載配置,效率低
(2)實現思想:吧加載配置文件和創建對象過程,在服務器啟動時候完成
(3)實現原理:
a) ServletContext對象
b) 監聽器(ServletContextListener接口)
c) 具體使用:
i. 服務器啟動時,為每個項目創建一個ServletContext對象
ii. 使用監聽器可以監聽到ServletContext在何時創建
iii. 在監聽器的,ServletContextListener接口的contextInitialized()方法方法中加載Spring配置文件(括號1中代碼),創建對象。
iv. 把創建出來的對象放到ServletContext域對象裡面(setAttribute方法)
3.Spring整合web項目原理
(1)加載Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加載文件要new一個對象,每次訪問都要new對象加載配置,效率低
(2)實現思想:吧加載配置文件和創建對象過程,在服務器啟動時候完成
(3)實現原理:
a) ServletContext對象
b) 監聽器(ServletContextListener接口)
c) 具體使用:
i. 服務器啟動時,為每個項目創建一個ServletContext對象
ii. 使用監聽器可以監聽到ServletContext在何時創建
iii. 在監聽器的,ServletContextListener接口的contextInitialized()方法方法中加載Spring配置文件(括號1中代碼),創建對象。
iv. 把創建出來的對象放到ServletContext域對象裡面(setAttribute方法)
v. 獲取對象時,從ServletContext域對象中得到(getAttribute方法)
二、Aop:面向切面,擴展功能時不通過源代碼,橫向抽取機制。
底層使用動態代理方式---增強方法
具體分兩種情況:
(1)有接口的情況:創建接口的實現類的代理對象,jdk動態代理
(2)沒有接口的情況:創建User類的子類的代理對象,cglib動態代理。子類可以通過super調用父類方法
增強:before,after,(前置,後置,異常,最終,環繞增強)
JAVA進階架構程序員福利:我這裡還總結整理了比較全面的JAVA相關的面試資料,都已經整理成了
PDF版,這些都可以分享給大家,關注私信我:【806】,免費領取!
閱讀更多 欣然1013 的文章