好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

带你了解Spring AOP的使用详解

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://HdhCmsTestspringframework.org/schema/beans"

        xmlns:xsi = "http://HdhCmsTestw3.org/2001/XMLSchema-instance"

        xmlns:context = "http://HdhCmsTestspringframework.org/schema/context"

        xmlns:aop = "http://HdhCmsTestspringframework.org/schema/aop"

        xmlns:tx = "http://HdhCmsTestspringframework.org/schema/tx"

        xmlns:mvc = "http://HdhCmsTestspringframework.org/schema/mvc"

        xsi:schemaLocation="http://HdhCmsTestspringframework.org/schema/beans

     https://HdhCmsTestspringframework.org/schema/beans/spring-beans.xsd

     http://HdhCmsTestspringframework.org/schema/context

     https://HdhCmsTestspringframework.org/schema/context/spring-context.xsd

     http://HdhCmsTestspringframework.org/schema/aop

     https://HdhCmsTestspringframework.org/schema/aop/spring-aop.xsd

     http://HdhCmsTestspringframework.org/schema/tx

     https://HdhCmsTestspringframework.org/schema/tx/spring-tx.xsd

     http://HdhCmsTestspringframework.org/schema/mvc

     https://HdhCmsTestspringframework.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

?

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

查看更多关于带你了解Spring AOP的使用详解的详细内容...

  阅读:10次