1.IoC(控制反轉)
所謂控制反轉,只要一個類將它內部狀態的控制權交給其他機制來完成。就是程式中不建立對象,只在設定檔中,描述如何建立它們的方式。在代碼中,不直接與對象和服務串連,在設定檔中描述哪個組件需要哪項服務。
IoC(控制反轉)是目的,DI(注入依賴)實現控制反轉的手段。
所謂依賴注入,就是將依賴的對象的建立和服務都交給設定檔和Spring架構(若不使用Spring架構,程式需要建立對象和相應的服務),依賴類只需要聲明所需要的成員變數。也就是說,依賴類原本需要主動去擷取對象,但採用依賴注入後對象由第三方機構提供,自己僅需聲明需要什麼對象即可。
舉個栗子:
不使用Spring架構時:
//使用傳統的方法,不考慮使用Spring架構 UserService userService = new UserService(); userService.setName("Dr_xiao"); userService.sayhello();
使用Spring架構時:
//使用Spring架構方法 //1.引入Spring的開發包(idea會自動下載) //2.建立Spring核心檔案spring-config.xml //3.建立一個Spring的IOC容器物件 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); //4.從IOC容器中擷取Bean執行個體 UserService userService = (UserService) context.getBean("UserService"); //5.調用相應的方法 userService.sayhello();
2.AOP(面向切面編程)
所謂面向切面編程,是對所有對象或者一類對象進行編程(安全、日誌、事物都屬於切面)。就是說不再關注於對象編程,而是更多的可以建立非行為性的關注面,將他們插入到應用程式中。目標是在不改變代碼的情況下,讓程式動態增加新的服務。
面向切面編程,是物件導向編程的一種補充,動態將代碼切入到類的指定方法、指定位置上。
物件導向編程(OOP)是從橫向上區分出一個一個類來,而面向切面編程(AOP)是從縱向上向對象中加入特定的代碼。
使用AOP的方法步驟:
定義組件:業務組件、通知群組件(前置、後置、環繞...) 在容器中配置組件,以及組件之間的依賴關係注入 通過AOP注入通知 執行個體化容器,從容器中取出組件進行使用
舉個栗子:
//1.定義介面//2.編寫對象(被代理對象=目標對象)//3.編寫通知(前置通知目標方法調用前調用)//4.在xml檔案中進行配置//4.1 配置被代理對象=目標對象//4.2 配置通知//4.3 配置代理對象是ProxyFactoryBean的對象執行個體//4.3.1 <!-- 代理介面集 -->//4.3.2 織入通知//4.3.3 配置被代理對象