带你了解Spring AOP的使用详解

目录springmvc.xmlBankDaoAdminCheckBankDaoImplLogInfoTransmactionAdminCheckInterceptorLogInfoInceptorTransmactionInterceptorTest总结

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>--><!--&lt;!&ndash;        切入点,什么时候,执行什么切入进来&ndash;&gt;--><!--        <aop:pointcut id="savepoint" expression="execution(* cn.hp.impl.*.*(..))"/>--><!--&lt;!&ndash;        切面-用来做事情-执行业务逻辑之前-你要做或执行什么事情&ndash;&gt;--><!--        <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"><!--代理对象是谁-->        <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();    /**     * 转账     */    public void transferAccounts();}

AdminCheck

package cn.hp.impl;public class AdminCheck {    public void check(){        System.out.println("正在验证账号信息");    }}

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("存钱的业务逻辑");//        transmaction.closeTransmaction();    }    @Override    public void withdrawMoney() {//        adminCheck.check();//        transmaction.beginTransmaction();        System.out.println("取钱的业务逻辑");//        transmaction.closeTransmaction();    }    @Override    public void transferAccounts() {        System.out.println("转账的业务逻辑");    }}

LogInfo

package cn.hp.impl;public class LogInfo {    public void write(){        System.out.println("写日志中");    }}

Transmaction

package cn.hp.impl;import org.aspectj.lang.ProceedingJoinPoint;public class Transmaction {    public void beginTransmaction(){        System.out.println("开始事务");    }    public void closeTransmaction(){        System.out.println("结束事务");    }    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();    }}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注的更多内容!

因害怕失败而不敢放手一搏,永远不会成功

带你了解Spring AOP的使用详解

相关文章:

你感兴趣的文章:

标签云: