SpringIoc和Aop底層原理

一、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>


SpringIoc和Aop底層原理

通過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底層原理

SpringIoc和Aop底層原理

SpringIoc和Aop底層原理

欣然

java架構交流群:473984645

1 人贊同了該文章

一、Ioc 通過Spring配置來創建對象,而不是new的方式

兩種方法:配置文件,註解

JAVA高級進階​zhuanlan.zhihu.com

SpringIoc和Aop底層原理

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>
SpringIoc和Aop底層原理

通過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底層原理

(2)沒有接口的情況:創建User類的子類的代理對象,cglib動態代理。子類可以通過super調用父類方法


SpringIoc和Aop底層原理

增強:before,after,(前置,後置,異常,最終,環繞增強)

JAVA進階架構程序員福利:我這裡還總結整理了比較全面的JAVA相關的面試資料,都已經整理成了

PDF版,這些都可以分享給大家,關注私信我:【806】,免費領取!


分享到:


相關文章: