Spring IOC、DI、AOP原理和實現

1)Spring IOC原理java

         IOC的意思是控件反轉也就是由容器控制程序之間的關係,把控件權交給了外部容器,以前的寫法,由程序代碼直接操控,而如今控制權由應用代碼中轉到了外部容器,控制權的轉移是所謂反轉。網上有一個很形象的比喻:spring

(2)DI(Dependency Injection,依賴注入)
        IoC的一個重點是在系統運行中,動態的向某個對象提供它所須要的其餘對象。這一點是經過DI(Dependency Injection,
依賴注入)來實現的。
方法instanceSpring1爲Spring中的實現用到ClassPathXmlApplicationContext類,要實現IOC的原理讀取
注入屬性實體


業務接口和實現類
beans.

(3)AOP面向切面express

    AOP是OOP的延續,是(Aspect Oriented Programming)的縮寫,意思是面向切面編程。要理解AOP首先得弄明白代理的概念。對於代理看下點擊打開連接這篇文章。編程

  AOP(Aspect Orient Programming),做爲面向對象編程的一種補充,普遍應用於處理一些具備橫切性質的系統級服務,如事務管理、安全檢查、緩存、對象池管理等。 AOP 實現的關鍵就在於 AOP 框架自動建立的 AOP 代理,AOP 代理則可分爲靜態代理和動態代理兩大類,其中靜態代理是指使用 AOP 框架提供的命令進行編譯,從而在編譯階段就可生成 AOP 代理類,所以也稱爲編譯時加強;而動態代理則在運行時藉助於 JDK 動態代理、CGLIB 等在內存中"臨時"生成 AOP 動態代理類,所以也被稱爲運行時加強。緩存

知道這些其餘的就是些配置了。安全

簡單的實現annotations和xml對AOP的實現。框架

首先看下目錄結構ide

MyInterceptor、MyInterceptor2分別是以annotations和xml定義的切面類測試

[java] view plain copyspa

  1. package com.service;  

  2.   

  3. import org.aspectj.lang.annotation.Aspect;  

  4. import org.aspectj.lang.annotation.Before;  

  5. import org.aspectj.lang.annotation.Pointcut;  

  6.   

  7. @Aspect   

  8. public class MyInterceptor {  

  9.     @Pointcut("execution (* com.serviceImpl.PersonServiceImpl.*(..))")  

  10.     private void myMethod(){};  

  11.       

  12.     @Before("myMethod()")  

  13.     public void doAccessCheck(){  

  14.         System.out.println("before");  

  15.     }  

  16.       

  17. }  


[java] view plain copy

  1. package com.service;  

  2.   

  3. public class MyInterceptor2 {  

  4.     public void doAccessCheck(){  

  5.         System.out.println("before");  

  6.     }  

  7. }  


業務和接口

[java] view plain copy

  1. package com.service;  

  2.   

  3. public interface PersonService {  

  4.     public void save(String name);  

  5.     public void update(String name);  

  6. }  


[java] view plain copy

  1. package com.serviceImpl;  

  2.   

  3. import com.service.PersonService;  

  4.   

  5. public class PersonServiceImpl implements PersonService {  

  6.   

  7.     @Override  

  8.     public void save(String name) {  

  9.         // TODO Auto-generated method stub  

  10.         System.out.println("保存");  

  11.     }  

  12.   

  13.     @Override  

  14.     public void update(String name) {  

  15.         // TODO Auto-generated method stub  

  16.         System.out.println("修改");  

  17.     }  

  18.   

  19. }  


簡單作個方法前通知,其餘的都同樣。

[java] view plain copy

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <beans xmlns="http://www.springframework.org/schema/beans"  

  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  

  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  

  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  

  6.             http://www.springframework.org/schema/aop  

  7.            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  

  8.   

  9.     <aop:aspectj-autoproxy/>  

  10.       

  11.     <bean id="personServiceImpl" class="com.serviceImpl.PersonServiceImpl"></bean>  

  12.     <bean id="personInterceptor" class="com.service.MyInterceptor2"></bean>  

  13.       

  14.     <aop:config>  

  15.         <aop:aspect id="asp" ref="personInterceptor">  

  16.             <aop:pointcut id="myCut" expression="execution (* com.serviceImpl.PersonServiceImpl.*(..))"/>  

  17.             <aop:before pointcut-ref="myCut" method="doAccessCheck"/>  

  18.         </aop:aspect>       

  19.     </aop:config>  

  20. </beans>  


測試類

[java] view plain copy

  1. package com.test;  

  2.   

  3.   

  4.   

  5. import org.junit.Test;  

  6. import org.springframework.context.ApplicationContext;  

  7. import org.springframework.context.support.ClassPathXmlApplicationContext;  

  8.   

  9. import com.service.PersonService;  

  10.   

  11. public class AopTest {  

  12.       

  13.     @Test  

  14.     public void interceptorTest(){  

  15.         ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");  

  16.         PersonService ps = (PersonService) ac.getBean("personServiceImpl");  

  17.         ps.save("aa");  

  18.     }  

  19. }  

相關文章
相關標籤/搜索