`
反求诸己
  • 浏览: 543277 次
  • 性别: Icon_minigender_1
  • 来自: 湖南娄底
社区版块
存档分类
最新评论

spring AOP [包括对struts动作的拦截]

    博客分类:
  • SSH
 
阅读更多
第一种:使用spring AOP 对action做日志管理,可以只拦截特定的action!
虽然Spring提供很多内置拦截器,但是我将向您展示如何创建自己的拦截器并把它应用于一个Struts动作。为了使用拦截器,您需要做三件事:

1、创建拦截器;
2、注册拦截器;
3、声明在何处拦截代码。

这看起来非常简单的几句话却非常强大。例如,在清单7中,我为Struts动作创建了一个日志记录拦截器。这个拦截器在每个方法调用之前打印一句话:

清单 7.一个简单的日志记录拦截器

package ca.nexcel.books.interceptors;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class LoggingInterceptor implements MethodBeforeAdvice {
   public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("logging before!");
    }
}


这个拦截器非常简单。before()方法在拦截点中每个方法之前运行。在本例中,它打印出一句话,其实它可以做您想做的任何事。下一步就是在Spring配置文件中注册这个拦截器,如清单8所示:

清单 8.在Spring配置文件中注册拦截器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
  "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
  <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>

  <bean name="/searchSubmit" 
        class="ca.nexcel.books.actions.SearchSubmit">
     <property name="bookService">
        <ref bean="bookService"/>
     </property>
  </bean>

  <!--  Interceptors --> 
  <bean name="logger"    
    class="ca.nexcel.books.interceptors.LoggingInterceptor"/> |(1)

  <!-- AutoProxies -->
  <bean name="loggingAutoProxy" 
        class="org.springframework.aop.framework.autoproxy.
          BeanNameAutoProxyCreator"> |(2)
    <property name="beanNames">
          <value>/searchSubmit</valuesgt; |(3)
    </property>
    <property name="interceptorNames">
        <list>
          <value>logger</value> |(4)
        </list>
    </property>
   </bean>

</beans>


您可能已经注意到了,清单8扩展了清单6中所示的应用程序以包含一个拦截器。具体细节如下:

◆在(1)处,我注册了这个拦截器。
◆在(2)处,我创建了一个bean名称自动代理,它描述如何应用拦截器。还有其他的方法定义拦截点,但是这种方法常见而简便。
◆在(3)处,我将Struts动作注册为将被拦截的bean。如果您想要拦截其他的Struts动作,则只需要在“beanNames”下面创建附加的<value>标记。
◆在(4)处,当拦截发生时,我执行了在(1)处创建的拦截器bean的名称。这里列出的所有拦截器都应用于“beanNames”。
  
就是这样。就像这个例子所展示的,将您的Struts动作置于Spring框架的控制之下,为处理您的Struts应用程序提供了一系列全新的选择。在本例中,使用动作委托可以轻松地利用Spring拦截器提高Struts应用程序中的日志记录能力。
第二种:使用Spring AOP对action做日志管理

该方法会对所有的action类进行拦截,不能指定具体的拦截类!
首先还是要写一个普通类,不过此类中的方法需要传入参数。 比如

view plain
package chen.hui.log 
 
import org.aspectj.lang.JoinPoint; 
 
public classs MyLog{ 
 
       //在类里面写方法,方法名是可以任意的。此处我用标准的before和after来表示 
 
        //此处的JoinPoint类可以获取,action所有的相关配置信息和request等内置对象。 
 
      public void before(JoinPoint joinpoint){ 
 
                joinpoint.getArgs();//此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象 
 
                System.out.println("被拦截方法调用之前调用此方法,输出此语句"); 
      } 
      public void after(JoinPoint joinpoint){ 
 
                  System.out.println("被拦截方法调用之后调用此方法,输出此语句"); 
      } 

其次我们在写一个action类作为被拦截类(Spring的AOP就是拦截这个类里面的方法)

view plain
package chen.hui.log 
 
public class LoginAction{//此类中方法可以写任意多个。我只写一个 
    public void test(){ 
        Sytem.out.println("测试类的test方法被调用"); 
    } 

最后进行配置文件的编写。在Spring的配置文件中我们需要进行几句话的配置

view plain
<bean id="testLog" class="chen.hui.log.MyLog"></bean> <!--将日志类注入到bean中。--> 
      <aop:config> 
            <aop:aspect id="b" ref="testLog"><!--调用日志类--> 
            <aop:pointcut id="log" expression="execution(* chen.hui.log.*.*(..))"/><!--配置在log包下所有的类在调用之前都会被拦截--> 
            <aop:before pointcut-ref="log" method="before"/><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的before方法--> 
            <aop:after pointcut-ref="log" method="after"/><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的after方法--> 
      </aop:aspect> 
</aop:config> 
分享到:
评论

相关推荐

    struts2+spring aop demo

    Struts2和Spring是两个非常流行的Java开源框架,它们在企业级应用开发中扮演着重要角色。Struts2主要用于处理HTTP请求和响应,提供MVC(Model-...通过实践这个示例,你可以进一步提升对Struts2、Spring以及AOP的理解。

    Spring-Struts-IBatis-AOP-Transaction

    Struts 2 与 Spring 的整合提供了更强大的功能,例如利用 Spring 的 DI 来管理 Struts 2 的动作类,以及事务管理。 **IBatis 框架** IBatis 是一个持久层框架,它将 SQL 查询与 Java 代码分离,允许开发者编写 SQL...

    ssh2登陆+spring aop做拦截

    SSH2 登录与 Spring AOP 拦截是两种在 IT 领域中常见的技术,主要用于提升系统安全性和管理效率。SSH2(Secure Shell version 2)是一种网络协议,用于提供安全的远程登录和数据传输,而 Spring AOP(Aspect ...

    struts2+spring4+mybatis3,登录jquery ajax,struts拦截器,springAOP的例子

    本项目示例涵盖了这些框架的整合使用,以及jQuery AJAX登录、Struts拦截器和Spring AOP(面向切面编程)的应用。 1. **Struts2**:Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了...

    aven2+spring(ioc aop)+struts+mybatis

    本项目标题提及的是"aven2+spring(ioc aop)+struts+mybatis",这四者是Java Web开发中的经典组合,被称为SSH2(Struts2、Spring、Hibernate和MyBatis)。尽管这里的"Hibernate"未在描述中出现,但通常与MyBatis一起...

    spring切面AOP所使用的jar包

    - **代理(Proxy)**:Spring AOP通过代理模式实现对目标对象的拦截,有JDK动态代理和CGLIB代理两种方式。 4. **Spring AOP与AspectJ的比较**: Spring AOP基于代理模型,而AspectJ则是一个完整的AOP编译器,可以...

    Spring,hibernate,struts jar 最新jar包

    Spring、Hibernate和Struts是Java开发中非常重要的三个框架,它们构成了经典的MVC(Model-View-Controller)架构,被广泛应用于企业级Web应用开发。这些框架极大地简化了开发过程,提高了开发效率,并且提供了良好的...

    struts2+hirbenate+SpringAOP

    Struts2、Hibernate和Spring AOP是Java Web开发中三个重要的框架,它们分别负责不同的职责。Struts2作为MVC(Model-View-Controller)框架,主要处理HTTP请求,实现业务逻辑与视图的解耦;Hibernate是一个持久化框架...

    struts2整合spring实现拦截器

    在本文中,我们将深入探讨如何实现Struts2与Spring的集成,以及利用拦截器来增强应用的功能。 首先,Struts2 是一个基于MVC设计模式的开源Web框架,它提供了强大的控制器层,使得开发者可以更方便地处理HTTP请求和...

    spring+mybatis+struts

    标题 "spring+mybatis+struts" 暗示了我们正在讨论一个基于Java的Web开发框架集成,其中Spring作为核心容器,MyBatis作为持久层框架,而Struts则作为表现层框架。这种组合在过去的几年里非常流行,因为它提供了良好...

    spring 配置aop时需要的jar包

    这个库包括了如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`等接口,它们定义了拦截器和通知(advice)的基本行为。在Spring AOP中,你需要实现这些接口来创建自定义的切面...

    struts拦截器jar 包

    总结来说,"struts拦截器jar包"是指专门为Struts 1.x框架提供拦截器功能的第三方库,`saif-0.1.jar`和`saif-spring.jar`可能是用于实现特定拦截逻辑或整合Spring框架的扩展库。了解并正确使用这些jar包能够有效地...

    Struts1 拦截器(SAIF)的使用

    拦截器在Struts1中扮演着重要角色,它允许开发者在动作执行前后插入自定义的逻辑,比如日志记录、权限验证、事务管理等。SAIF插件是Struts1中一个特定的拦截器实现,用于增强框架的功能。 **1. Struts1 拦截器原理*...

    Struts2拦截器实现权限控制demo

    在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作执行前后插入自定义逻辑。在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何...

    spring+hibernate+struts

    Struts提供了动作(Action)和表单(Form)组件,以及一系列拦截器(Interceptor)来处理请求,执行业务逻辑,并将结果转发给相应的视图进行展示。 SSH整合的关键在于如何让这三个框架协同工作: 1. **Spring作为...

    org.springframework.web.struts-3.1.0.M2.jar

    3. **AOP(面向切面编程)**:Spring的AOP支持可以帮助开发者定义拦截器,实现在不修改原有代码的情况下,对特定操作进行增强,如日志记录、事务管理等。 4. **模型驱动**:Spring的ModelAndView对象可以用来封装...

    spring+hibernate+struts整合jar包

    它提供了一系列的拦截器、动作和结果类型,使得开发者能够轻松构建动态Web应用。在SSH整合中,Struts2作为前端控制器,接收用户的HTTP请求,调用Spring管理的业务服务,再由这些服务通过Hibernate与数据库交互,最后...

    struts1拦截器实现所需saif.jar包

    `saif-spring.jar`是专门为Struts1框架设计的一个扩展包,它包含了对Spring框架的支持。Spring是一个全面的企业级应用开发框架,提供了依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented ...

    struts2拦截器实现权限控制

    在Struts2中,拦截器是基于AOP(面向切面编程)的概念设计的,它们在Action调用前后执行,可以添加额外的功能,如日志记录、事务管理、权限验证等。对于权限控制,拦截器可以在请求到达Action之前检查用户的登录状态...

    使用Spring更好地处理Struts动作

    用,留给您的简单任务就只是在一个 XML 配置文件中把它们连接好。 依赖注入是一个强大的特性,但是 Spring ...您很快就会看到,为了处理横切关注点,Spring AOP 发布了它自己的拦截器,您也可以编写您自己的拦截器。

Global site tag (gtag.js) - Google Analytics