`

spring AOP 入门实例

 
阅读更多

这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象。写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置AOP里面的东东。
目标对象的接口:IStudent.java

Java代码 收藏代码
  1. 1/**
  2. 2*
  3. 3*/
  4. 4packagecom.dragon.study;
  5. 5
  6. 6/**
  7. 7*@authordragon
  8. 8*
  9. 9*/
  10. 10publicinterfaceIStudent{
  11. 11
  12. 12publicvoidaddStudent(Stringname);
  13. 13}

目标类:StudentImpl.java

Java代码 收藏代码
  1. 1/**
  2. 2*
  3. 3*/
  4. 4packagecom.dragon.study.Impl;
  5. 5
  6. 6importcom.dragon.study.IStudent;
  7. 7
  8. 8/**
  9. 9*@authordragon
  10. 10*
  11. 11*/
  12. 12publicclassStudentImplimplementsIStudent{
  13. 13
  14. 14publicvoidaddStudent(Stringname){
  15. 15System.out.println("欢迎"+name+"你加入Spring家庭!");
  16. 16}
  17. 17}
  18. 18

前置通知:BeforeAdvice.java

Java代码 收藏代码
  1. 1/**
  2. 2*
  3. 3*/
  4. 4packagecom.dragon.Advice;
  5. 5
  6. 6importjava.lang.reflect.Method;
  7. 7
  8. 8importorg.springframework.aop.MethodBeforeAdvice;
  9. 9
  10. 10/**
  11. 11*@authordragon
  12. 12*
  13. 13*/
  14. 14publicclassBeforeAdviceimplementsMethodBeforeAdvice{
  15. 15
  16. 16publicvoidbefore(Methodmethod,Object[]args,Objecttarget)
  17. 17throwsThrowable{
  18. 18
  19. 19System.out.println("这是BeforeAdvice类的before方法.");
  20. 20
  21. 21}
  22. 22}

后置通知:AfterAdvice.java

Java代码 收藏代码
  1. 1/**
  2. 2*
  3. 3*/
  4. 4packagecom.dragon.Advice;
  5. 5
  6. 6importjava.lang.reflect.Method;
  7. 7
  8. 8importorg.springframework.aop.AfterReturningAdvice;
  9. 9
  10. 10/**
  11. 11*@authordragon
  12. 12*
  13. 13*/
  14. 14publicclassAfterAdviceimplementsAfterReturningAdvice{
  15. 15
  16. 16publicvoidafterReturning(ObjectreturnValue,Methodmethod,
  17. 17Object[]args,Objecttarget)throwsThrowable{
  18. 18System.out.println("这是AfterAdvice类的afterReturning方法.");
  19. 19}
  20. 20
  21. 21
  22. 22}

环绕通知:CompareInterceptor.java

Java代码 收藏代码
  1. 1/**
  2. 2*
  3. 3*/
  4. 4packagecom.dragon.Advice;
  5. 5
  6. 6importorg.aopalliance.intercept.MethodInterceptor;
  7. 7importorg.aopalliance.intercept.MethodInvocation;
  8. 8
  9. 9
  10. 10/**
  11. 11*@authordragon
  12. 12*
  13. 13*/
  14. 14publicclassCompareInterceptorimplementsMethodInterceptor{
  15. 15
  16. 16publicObjectinvoke(MethodInvocationinvocation)throwsThrowable{
  17. 17Objectresult=null;
  18. 18Stringstu_name=invocation.getArguments()[0].toString();
  19. 19if(stu_name.equals("dragon")){
  20. 20//如果学生是dragon时,执行目标方法,
  21. 21result=invocation.proceed();
  22. 22
  23. 23}else{
  24. 24System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入.");
  25. 25}
  26. 26
  27. 27returnresult;
  28. 28}
  29. 29}

配置文件applicationContext.xml

Java代码 收藏代码
  1. 1<?xmlversion="1.0"encoding="UTF-8"?>
  2. 2<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  3. 3
  4. 4<beans>
  5. 5
  6. 6<beanid="beforeAdvice"class="com.dragon.Advice.BeforeAdvice"></bean>
  7. 7<beanid="afterAdvice"class="com.dragon.Advice.AfterAdvice"></bean>
  8. 8<beanid="compareInterceptor"class="com.dragon.Advice.CompareInterceptor"></bean>
  9. 9<beanid="studenttarget"class="com.dragon.study.Impl.StudentImpl"></bean>
  10. 10
  11. 11<beanid="student"class="org.springframework.aop.framework.ProxyFactoryBean">
  12. 12<propertyname="proxyInterfaces">
  13. 13<value>com.dragon.study.IStudent</value>
  14. 14</property>
  15. 15<propertyname="interceptorNames">
  16. 16<list>
  17. 17<value>beforeAdvice</value>
  18. 18<value>afterAdvice</value>
  19. 19<value>compareInterceptor</value>
  20. 20</list>
  21. 21</property>
  22. 22<propertyname="target">
  23. 23<refbean="studenttarget"/>
  24. 24</property>
  25. 25
  26. 26</bean>
  27. 27
  28. 28</beans>

现在开始写测试类,Test.java

Java代码 收藏代码
  1. 1/**
  2. 2*
  3. 3*/
  4. 4packagecom;
  5. 5
  6. 6importorg.springframework.context.ApplicationContext;
  7. 7importorg.springframework.context.support.FileSystemXmlApplicationContext;
  8. 8
  9. 9importcom.dragon.study.IStudent;
  10. 10
  11. 11/**
  12. 12*@authordragon
  13. 13*
  14. 14*/
  15. 15publicclassTest{
  16. 16
  17. 17/**
  18. 18*@paramargs
  19. 19*/
  20. 20publicstaticvoidmain(String[]args){
  21. 21//TODOAuto-generatedmethodstub
  22. 22ApplicationContextctx=
  23. 23newFileSystemXmlApplicationContext("/com/dragon/applicationContext.xml");
  24. 24
  25. 25IStudentperson=(IStudent)ctx.getBean("student");
  26. 26person.addStudent("dragon");
  27. 27
  28. 28//person.addStudent("javadragon");
  29. 29}
  30. 30
  31. 31}
  32. 32

当然,运行该程序时,要加上commons-logging.jar 包

在Spring Appactiocontext.xml配置文件;你定义的前置,后置;环绕等通知在配置文件中实现了代理(org.springframework.aop.framework.ProxyFactoryBean)
以此将通知放入到了原Bean中;这样才能使原Bean中方法调用时自动执行通知
这是其一》
<property name="proxyInterfaces">
<property name="interceptorNames">
<property name="target">
这三个属性是一定要配置的
第一是被代理的接口(IStudent)
第二是通知列表(前置,后置;环绕)上面定义的三个类
第三是被代理的原Bean(StudentImpl )


分享到:
评论

相关推荐

    spring AOP入门实例

    在这个入门实例中,我们将深入理解Spring AOP如何实现简单日志记录。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的核心...

    Spring AOP 入门实例

    **Spring AOP 入门实例** 在Java编程中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许程序员定义“横切关注点”,如日志、事务管理、性能监控等,然后将这些关注点与核心业务逻辑...

    Spring AOP 入门实例1

    以下是一个简单的Spring AOP入门实例步骤: 1. 首先,定义一个切面类,包含通知方法。例如,一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example*...

    Spring AOP入门及其实例讲解、下载

    **Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...

    spring2-aop入门实例教程

    ### Spring2-AOP入门实例教程知识点详解 #### 一、Spring框架概述 - **轻量级J2EE开发框架**:Spring是一个轻量级的Java应用框架,它为开发复杂的企业级应用提供了一种简化的方法。 - **发展历程**:自2002年发布...

    最简单的SpringAOP入门案例

    本教程将通过一个简单的Spring AOP入门案例,帮助初学者理解这一概念。 ### 一、AOP基础 1. **切面(Aspect)**:切面是关注点的模块化,它封装了跨越多个对象的行为或数据。在Spring AOP中,切面可以由一个类定义...

    Spring AOP @AspectJ 入门实例

    本实例将带你深入理解并实践Spring AOP与@AspectJ的结合使用。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,即跨越多个对象的行为或责任。这些切面可以包含业务逻辑、日志、...

    spring AOP 实例(@AspectJ)

    一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......

    一个Spring的入门实例;一个Struts的入门实例

    以上就是 Spring 和 Struts 的基础概念及入门实例的创建流程。这两个框架各有优势,Spring 更注重模块化和灵活性,而 Struts 则更侧重于 MVC 结构的实现。在实际项目中,两者常被一起使用,形成所谓的“Spring + ...

    Spring -Aop入门

    ### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP (Aspect Oriented Programming) 是一种面向切面编程的技术,在Spring框架中得到了良好的支持。通过这种方式,开发者可以更加灵活地组织代码,使得...

    springAOP-dome

    在这个名为"springAOP-dome"的实例中,我们将探讨如何利用Spring AOP实现一个简单的日志记录功能,以作为入门学习。 首先,了解AOP的基本概念是必要的。面向切面编程是一种编程范式,旨在解决程序中的横切关注点,...

    Spring_02_入门篇_AOP_简单实例

    **Spring AOP 入门篇:面向切面编程的注解与XML模式** 在软件开发中,Spring框架因其强大的功能和灵活性而广受欢迎,尤其是在企业级应用开发中。本教程将深入探讨Spring中的核心概念之一——面向切面编程(Aspect-...

    Jersey2.13+spring3.2.3入门实例

    ** Jersey2.13 + Spring3.2.3入门实例详解** 本文将深入探讨如何结合Jersey 2.13和Spring 3.2.3框架构建一个入门级的Web服务应用。首先,我们来了解这两个关键组件的核心功能。 **Jersey** 是Java语言中最流行的...

    spring AOP 例子参考

    本教程将深入探讨Spring AOP的概念、工作原理以及如何通过实例来理解和应用这一技术。 **一、Spring AOP基本概念** 1. **切面(Aspect)**:切面是关注点的模块化,例如日志、事务管理。在Spring AOP中,切面由...

    spring入门实例

    在这个"spring入门实例"中,我们将探索如何利用Spring和Spring JDBC构建一个简单的登录模块。 首先,我们需要理解Spring框架的基础概念。Spring框架的核心在于IoC(Inversion of Control,控制反转)和DI...

    spring菜鸟入门经典实例

    在Spring入门阶段,首先要理解的是依赖注入(DI)。DI是一种设计模式,它允许我们解耦组件,让它们之间通过接口而非具体的实现进行交互。Spring通过容器管理对象的生命周期和依赖关系,我们只需要配置好bean的定义,...

Global site tag (gtag.js) - Google Analytics