1。假設你已經配好依賴注入那一塊。此時的bean.xml為
<?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:context="http://www.springframework.org/schema/context"
? ? ?xsi:schemaLocation="http://www.springframework.org/schema/beans
? ? ? ? ?http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
? ? ? ? ?http://www.springframework.org/schema/context
? ? ? ? ?http://www.springframework.org/schema/context/spring-context-3.0.xsd">
? ?<!-- 打開Spring的Annotation支持 -->
? ?<context:annotation-config/>
? ?<!-- 設定Spring 去哪些包中找Annotation -->
? ?<context:component-scan base-package="org.zttc.itat.spring"/>
? ? ? ? ? ?
</beans>
?
2.加上aop的schema????
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop ? ?
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
3.?打開基于Annotation的AOP?
<aop:aspectj-autoproxy/>
最后的bean.xml為:
<?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"
? ? ?xmlns:context="http://www.springframework.org/schema/context"
? ? ?xsi:schemaLocation="http://www.springframework.org/schema/beans
? ? ? ? ?http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
? ? ? ? ?http://www.springframework.org/schema/context
? ? ? ? ?http://www.springframework.org/schema/context/spring-context-3.0.xsd
? ? ? ? ?http://www.springframework.org/schema/aop
? ? ? ? ?http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
? ?<!-- 打開Spring的Annotation支持 -->
? ?<context:annotation-config/>
? ?<!-- 設定Spring 去哪些包中找Annotation -->
? ?<context:component-scan base-package="org.zttc.itat.spring"/>
? ?<!-- 打開基于Annotation的AOP -->
? ?<aop:aspectj-autoproxy/>
? ?
</beans>
4.創建一個aop的關注點。 叫LogAspect.java.
package org.zttc.itat.spring.proxy;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
?
@Component("logAspect")//讓這個切面類被Spring所管理
@Aspect//申明這個類是一個切面類
public class LogAspect {
/**execution說明我要在那些方法上使用該方法
?* execution(* org.zttc.itat.spring.dao.*.add*(..))
?* 第一個*表示任意返回值
?* 第二個*表示 org.zttc.itat.spring.dao包中的所有類
?* 第三個*表示以add開頭的所有方法
?* (..)表示任意參數
?*/
@Before("execution(* org.zttc.itat.spring.dao.*.add*(..))||" +
"execution(* org.zttc.itat.spring.dao.*.delete*(..))||" +
"execution(* org.zttc.itat.spring.dao.*.update*(..))")
public void logStart(JoinPoint jp) {
//得到執行的對象
System.out.println(jp.getTarget());
//得到執行的方法
System.out.println(jp.getSignature().getName());
Logger.info("加入日志");
}
/**
?* 函數調用完成之后執行
?* @param jp
?*/
@After("execution(* org.zttc.itat.spring.dao.*.add*(..))||" +
"execution(* org.zttc.itat.spring.dao.*.delete*(..))||" +
"execution(* org.zttc.itat.spring.dao.*.update*(..))")
public void logEnd(JoinPoint jp) {
Logger.info("方法調用結束加入日志");
}
/**
?* 函數調用中執行
?* @param pjp
?* @throws Throwable
?*/
@Around("execution(* org.zttc.itat.spring.dao.*.add*(..))||" +
"execution(* org.zttc.itat.spring.dao.*.delete*(..))||" +
"execution(* org.zttc.itat.spring.dao.*.update*(..))")
public void logAround(ProceedingJoinPoint pjp) throws Throwable {
Logger.info("開始在Around中加入日志");
pjp.proceed();//執行程序
Logger.info("結束Around");
}
}
4.1 導入aopalliance.jar ? aspectjrt.jar ?aspectjweaver.jar三個包,因為spring是使用Aspect來實現AOP
總結:spring的AOP還是很簡單的,前面配置好的依賴注入的例子根本不用動,我在這個給dao織入了方法,但是這只是這里單方面的知道,從被織的對象來說,它根本不知道你是不是給自己加入了方法。