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
package com.service;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
public class MyInterceptor {
@Pointcut("execution (* com.serviceImpl.PersonServiceImpl.*(..))")
private void myMethod(){};
@Before("myMethod()")
public void doAccessCheck(){
System.out.println("before");
}
}
[java] view plain copy
package com.service;
public class MyInterceptor2 {
public void doAccessCheck(){
System.out.println("before");
}
}
業務和接口
[java] view plain copy
package com.service;
public interface PersonService {
public void save(String name);
public void update(String name);
}
[java] view plain copy
package com.serviceImpl;
import com.service.PersonService;
public class PersonServiceImpl implements PersonService {
@Override
public void save(String name) {
// TODO Auto-generated method stub
System.out.println("保存");
}
@Override
public void update(String name) {
// TODO Auto-generated method stub
System.out.println("修改");
}
}
簡單作個方法前通知,其餘的都同樣。
[java] view plain copy
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<aop:aspectj-autoproxy/>
<bean id="personServiceImpl" class="com.serviceImpl.PersonServiceImpl"></bean>
<bean id="personInterceptor" class="com.service.MyInterceptor2"></bean>
<aop:config>
<aop:aspect id="asp" ref="personInterceptor">
<aop:pointcut id="myCut" expression="execution (* com.serviceImpl.PersonServiceImpl.*(..))"/>
<aop:before pointcut-ref="myCut" method="doAccessCheck"/>
</aop:aspect>
</aop:config>
</beans>
測試類
[java] view plain copy
package com.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.service.PersonService;
public class AopTest {
@Test
public void interceptorTest(){
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
PersonService ps = (PersonService) ac.getBean("personServiceImpl");
ps.save("aa");
}
}