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>-->
<!--<!– 切入点,什么时候,执行什么切入进来–>-->
<!-- <aop:pointcut id="savepoint" expression="execution(* cn.hp.impl.*.*(..))"/>-->
<!--<!– 切面-用来做事情-执行业务逻辑之前-你要做或执行什么事情–>-->
<!-- <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();
}
}
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!