帶你了解Spring AOP的使用詳解
更新時(shí)間:2021年07月12日 09:22:19 作者:wbcra
這篇文章主要介紹了Spring AOP的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
springmvc.xml
<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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<bean id="adminCheck" class="cn.hp.impl.AdminCheck"></bean>
<bean id="transmaction" class="cn.hp.impl.Transmaction"></bean>
<bean id="bankDao" class="cn.hp.impl.BankDaoImpl">
<!-- <property name="adminCheck" ref="adminCheck"></property>-->
<!-- <property name="transmaction" ref="transmaction"></property>-->
</bean>
<!-- <aop:config>-->
<!--<!– 切入點(diǎn),什么時(shí)候,執(zhí)行什么切入進(jìn)來(lái)–>-->
<!-- <aop:pointcut id="savepoint" expression="execution(* cn.hp.impl.*.*(..))"/>-->
<!--<!– 切面-用來(lái)做事情-執(zhí)行業(yè)務(wù)邏輯之前-你要做或執(zhí)行什么事情–>-->
<!-- <aop:aspect id="adminincepter" ref="adminCheck">-->
<!-- <aop:before method="check" pointcut-ref="savepoint"></aop:before>-->
<!-- </aop:aspect>-->
<!-- -->
<!-- <aop:aspect id="transmactionincepter" ref="transmaction">-->
<!-- <aop:around method="dointcepter" pointcut-ref="savepoint"></aop:around>-->
<!-- </aop:aspect>-->
<!-- </aop:config>-->
<bean id="logInfo" class="cn.hp.impl.LogInfo"></bean>
<bean id="adminCheckInterceptor" class="cn.hp.interceptor.AdminCheckInterceptor">
<property name="adminCheck" ref="adminCheck"></property>
</bean>
<bean id="logInfoInceptor" class="cn.hp.interceptor.LogInfoInceptor">
<property name="logInfo" ref="logInfo"></property>
</bean>
<bean id="transmactionInterceptor" class="cn.hp.interceptor.TransmactionInterceptor">
<property name="transmaction" ref="transmaction"></property>
</bean>
<!-- 注入代理類-->
<bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--代理對(duì)象是誰(shuí)-->
<property name="target" ref="bankDao"></property>
<!-- 代理的接口-->
<property name="proxyInterfaces" value="cn.hp.dao.BankDao"></property>
<!-- 代理的通知組件-->
<property name="interceptorNames">
<list>
<value>adminCheckInterceptor</value>
<value>logInfoInceptor</value>
<value>transmactionInterceptor</value>
</list>
</property>
</bean>
</beans>
BankDao
package cn.hp.dao;
public interface BankDao {
/**
* 存錢
*/
public void remit();
/**
* 取錢
*/
public void withdrawMoney();
/**
* 轉(zhuǎn)賬
*/
public void transferAccounts();
}
AdminCheck
package cn.hp.impl;
public class AdminCheck {
public void check(){
System.out.println("正在驗(yàn)證賬號(hào)信息");
}
}
BankDaoImpl
package cn.hp.impl;
import cn.hp.dao.BankDao;
public class BankDaoImpl implements BankDao {
@Override
public void remit() {
// adminCheck.check();
// transmaction.beginTransmaction();
System.out.println("存錢的業(yè)務(wù)邏輯");
// transmaction.closeTransmaction();
}
@Override
public void withdrawMoney() {
// adminCheck.check();
// transmaction.beginTransmaction();
System.out.println("取錢的業(yè)務(wù)邏輯");
// transmaction.closeTransmaction();
}
@Override
public void transferAccounts() {
System.out.println("轉(zhuǎn)賬的業(yè)務(wù)邏輯");
}
}
LogInfo
package cn.hp.impl;
public class LogInfo {
public void write(){
System.out.println("寫(xiě)日志中");
}
}
Transmaction
package cn.hp.impl;
import org.aspectj.lang.ProceedingJoinPoint;
public class Transmaction {
public void beginTransmaction(){
System.out.println("開(kāi)始事務(wù)");
}
public void closeTransmaction(){
System.out.println("結(jié)束事務(wù)");
}
public void dointcepter(ProceedingJoinPoint point) throws Throwable {
beginTransmaction();
point.proceed();
closeTransmaction();
}
}
AdminCheckInterceptor
package cn.hp.interceptor;
import cn.hp.impl.AdminCheck;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
import java.util.Set;
public class AdminCheckInterceptor implements MethodBeforeAdvice {
private AdminCheck adminCheck;
public AdminCheck getAdminCheck() {
return adminCheck;
}
public void setAdminCheck(AdminCheck adminCheck) {
this.adminCheck = adminCheck;
}
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
adminCheck.check();
}
}
LogInfoInceptor
package cn.hp.interceptor;
import cn.hp.impl.LogInfo;
import org.springframework.aop.AfterReturningAdvice;
import java.lang.reflect.Method;
public class LogInfoInceptor implements AfterReturningAdvice {
private LogInfo logInfo;
public LogInfo getLogInfo() {
return logInfo;
}
public void setLogInfo(LogInfo logInfo) {
this.logInfo = logInfo;
}
@Override
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
logInfo.write();
}
}
TransmactionInterceptor
package cn.hp.interceptor;
import cn.hp.impl.Transmaction;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.ibatis.transaction.Transaction;
public class TransmactionInterceptor implements MethodInterceptor {
private Transmaction transmaction;
public Transmaction getTransmaction() {
return transmaction;
}
public void setTransmaction(Transmaction transmaction) {
this.transmaction = transmaction;
}
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
transmaction.beginTransmaction();
Object obj = invocation.proceed();
transmaction.closeTransmaction();
return obj;
}
}
Test
package cn.hp.test;
import cn.hp.dao.BankDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//test1();
// test2();
test3();
}
private static void test3() {
ApplicationContext ac= new ClassPathXmlApplicationContext("springmvc.xml");
BankDao proxyFactory = ac.getBean("proxyFactory", BankDao.class);
proxyFactory.remit();
}
private static void test2() {
ApplicationContext ac = new ClassPathXmlApplicationContext("springmvc.xml");
BankDao bd = ac.getBean("bankDao",BankDao.class);
bd.transferAccounts();
}
private static void test1() {
ApplicationContext ac = new ClassPathXmlApplicationContext("springmvc.xml");
BankDao bd = ac.getBean("bankDao",BankDao.class);
bd.withdrawMoney();
}
}
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
@Conditional注解的使用場(chǎng)景和源碼解析
這篇文章主要介紹了@Conditional注解的使用場(chǎng)景和源碼解析,@Conditional是一個(gè)條件注解,它的作用是判斷Bean是否滿足條件,如果滿足條件,則將Bean注冊(cè)進(jìn)IOC中,如果不滿足條件,則不進(jìn)行注冊(cè),需要的朋友可以參考下2023-11-11
解決工具接口調(diào)用報(bào)錯(cuò):error:Unsupported Media Type問(wèn)題
當(dāng)遇到"UnsupportedMediaType"錯(cuò)誤時(shí),意味著HTTP請(qǐng)求的Content-Type與服務(wù)器期望的不匹配,比如服務(wù)器期待接收J(rèn)SON格式數(shù)據(jù),而發(fā)送了純文本格式,常見(jiàn)的Content-Type類型包括text/html、application/json、multipart/form-data等2024-10-10
JMagick實(shí)現(xiàn)基本圖像處理的類實(shí)例
這篇文章主要介紹了JMagick實(shí)現(xiàn)基本圖像處理的類,實(shí)例分析了java圖像處理的相關(guān)技巧,需要的朋友可以參考下2015-06-06
詳解java封裝返回結(jié)果與RestControllerAdvice注解
這篇文章主要為大家介紹了java封裝返回結(jié)果與RestControllerAdvice注解實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

