springmvc.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
< 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package cn.hp.dao; public interface BankDao { /** * 存钱 */ public void remit(); /** * 取钱 */ public void withdrawMoney(); /** * 转账 */ public void transferAccounts(); } |
AdminCheck
1
2
3
4
5
6
|
package cn.hp.impl; public class AdminCheck { public void check(){ System.out.println( "正在验证账号信息" ); } } |
BankDaoImpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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
1
2
3
4
5
6
|
package cn.hp.impl; public class LogInfo { public void write(){ System.out.println( "写日志中" ); } } |
Transmaction
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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(); } } |
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/wbcra/article/details/118638499