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