介绍

在Java中,SSH框架是指结合了Struts2、Spring和Hibernate的组合。其中,Spring框架用于管理Bean的生命周期,Struts2框架用于Web层的请求处理和页面跳转,Hibernate框架用于数据持久化。在一个SSH项目中,我们可以通过自定义切面来实现对一些公共功能的统一处理,比如日志记录、权限控制等。本文将介绍如何配置自定义切面,并提供代码示例。

准备工作

在开始之前,我们需要先搭建一个基本的SSH项目,具体步骤如下:

  1. 创建一个Maven项目,并添加以下依赖:
<dependencies>
    <!-- Struts2 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.5.26</version>
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.10</version>
    </dependency>

    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.3.Final</version>
    </dependency>

    <!-- AspectJ -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.9.7</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.7</version>
    </dependency>
</dependencies>
  1. src/main/resources目录下创建struts.xml文件,并添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "
<struts>
    <constant name="struts.devMode" value="true" />
    <package name="default" namespace="/" extends="struts-default">
        <action name="hello" class="com.example.HelloAction">
            <result>/hello.jsp</result>
        </action>
    </package>
</struts>
  1. src/main/resources目录下创建applicationContext.xml文件,并添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
       xmlns:xsi="
       xsi:schemaLocation="
                           
    <bean id="helloService" class="com.example.HelloService" />
</beans>
  1. src/main/java目录下创建com.example包,并在该包下创建以下类:
  • HelloAction.java
package com.example;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {
    private HelloService helloService;

    public void setHelloService(HelloService helloService) {
        this.helloService = helloService;
    }

    @Override
    public String execute() throws Exception {
        helloService.sayHello();
        return SUCCESS;
    }
}
  • HelloService.java
package com.example;

public class HelloService {
    public void sayHello() {
        System.out.println("Hello, world!");
    }
}

至此,我们已经完成了SSH框架的基本搭建。

配置自定义切面

接下来,我们将配置一个自定义切面来实现在每次执行HelloActionsayHello方法时记录日志的功能。

  1. 创建一个LogAspect类,并添加以下代码:
package com.example;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

@Aspect
public class LogAspect {
    @Pointcut("execution(* com.example.HelloService.sayHello())")
    public void sayHelloPointcut() {
    }

    @Before("sayHelloPointcut()")
    public void beforeSayHello(JoinPoint joinPoint) {
        System.out.println("Before sayHello...");
    }

    @After("sayHelloPointcut