介绍
在Java中,SSH框架是指结合了Struts2、Spring和Hibernate的组合。其中,Spring框架用于管理Bean的生命周期,Struts2框架用于Web层的请求处理和页面跳转,Hibernate框架用于数据持久化。在一个SSH项目中,我们可以通过自定义切面来实现对一些公共功能的统一处理,比如日志记录、权限控制等。本文将介绍如何配置自定义切面,并提供代码示例。
准备工作
在开始之前,我们需要先搭建一个基本的SSH项目,具体步骤如下:
- 创建一个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>
- 在
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>
- 在
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>
- 在
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框架的基本搭建。
配置自定义切面
接下来,我们将配置一个自定义切面来实现在每次执行HelloAction的sayHello方法时记录日志的功能。
- 创建一个
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
















