配置文件:application_context.xml
<!-- aop注解 proxy-target-class="true" 切入的类可以是代理类 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!--切面-->
<bean id="systemLogAspect" class="com.lty.common.log.SystemLogAspect"></bean>
java 代码:
package com.lty.common.log;
import javax.annotation.Resource;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.lty.common.redis.RedisHelper;
import com.lty.common.util.Constants;
import com.lty.thailand.entity.BaseUserLog;
import com.lty.thailand.service.impl.BaseUserLogService;
/**
* @desc 切点类
*/
@Aspect
@Component
public class SystemLogAspect {
//注入Service用于把日志保存数据库
@Resource //这里我用resource注解,一般用的是@Autowired,他们的区别如有时间我会在后面的博客中来写
private BaseUserLogService baseUserLogService;
//
private static final Logger logger = LoggerFactory.getLogger(SystemLogAspect. class);
@Pointcut("execution (* com.lty.travel.controller.ManagerController.*(..))")
public void controllerPointcut() {}
@Around("controllerPointcut()")
public Object controllerAround(ProceedingJoinPoint joinPoint) throws Throwable { // 执行的类
String exeType = null; // 执行的方法
String exeMethod = null;
Object retObj = null ;
long start = System.currentTimeMillis();
try { // 获取接口的请求参数
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
exeType = signature.getDeclaringType().getCanonicalName();
exeMethod = signature.getMethod().getName();
BaseUserLog baseUserLog = null ;
String sqlId = null ;
boolean needInsert = false;
if (joinPoint.getArgs() != null && joinPoint.getArgs().length > 0) {
for ( int i = 0; i < joinPoint.getArgs().length; i++) {
baseUserLog = new BaseUserLog();
JSONObject requestParam = JSONObject.parseObject((String)joinPoint.getArgs()[i]);
String userId = requestParam.getString("userId");
if(!StringUtils.isEmpty(userId)){
needInsert = true ;
baseUserLog.setUserId(userId);
sqlId = requestParam.getString("sqlId");
baseUserLog.setOperType(sqlId);
}
}
}
try{
retObj = joinPoint.proceed();
if("getCertification".equals(sqlId)||"getCertificationNew".equals(sqlId)){
JSONObject requestParam = JSONObject.parseObject((String)retObj);
String userIdss = requestParam.getString("data");
JSONObject requestParam22 = JSONObject.parseObject(userIdss);
baseUserLog.setUserId(requestParam22.getString("userId"));
}
baseUserLog.setStatus(0);
}catch(Exception e){
baseUserLog.setStatus(1);
}
if(needInsert){
baseUserLog.setExecuteTime(System.currentTimeMillis() - start);
if(!"quitApp".equals(sqlId)){
RedisHelper.setWithExpireTime(Constants.USER_KEY+""+baseUserLog.getUserId(), baseUserLog.getUserId(), 30*60);
}
baseUserLogService.insertBaseUserLog(baseUserLog);
}
} catch (Throwable ex) {
} finally {
logger.info("[{}.{} end,cost {} ms]", new Object[] { exeType, exeMethod, (System.currentTimeMillis() - start)
});
}
return retObj;
}
}
访问静态图片
配置文件:application_context.xml
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/><!--可为空,方便实现自已的依据扩展名来选择视图解释类逻辑 ->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>
相关推荐
2. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring 提供了 AOP 支持,可以实现日志记录、事务管理等功能,将这些横切关注点从核心业务逻辑中分离出来。 3. **Spring Boot**:如果项目使用了 Spring...
7. **静态资源处理**:Spring Web可以配置以处理Web应用中的静态资源,如CSS、JavaScript、图片等,允许设定缓存策略和访问控制。 8. **WebSocket支持**:Spring Web还提供了WebSocket的支持,可以创建基于...
2. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring的AOP支持使开发者能够创建关注点分离的代码,例如日志、事务管理等,这些可以作为独立的“切面”来处理,而不必在每个业务方法中重复编写。...
Spring MVC允许通过`<mvc:resources>`标签配置访问静态资源,如CSS、JavaScript、图片等。这通常在Spring MVC的配置类中进行,通过`addResourceHandlers()`方法指定静态资源的路径,并设定其映射规则。 综上所述,...
在 "springmvc-springDemo" 中,可能还包含了基于 Spring AOP 的日志记录、事务管理等功能。通过定义切面(Aspect),可以在特定方法执行前后执行自定义逻辑。 **9. 整合其他技术** Spring MVC 可以轻松地与其他...
例如,使用Spring的DI可以帮助实现对象间的协作,而AOP可以用于记录游戏日志或实现计时器功能。 【标签】中的"开发语言"指的是Java,这是一种广泛使用的、跨平台的、静态类型的编程语言,尤其适合大型企业级应用。...
静态资源访问指的是在Spring Boot应用中,如何组织和访问静态文件,例如JavaScript、CSS和图片等。文件上传功能则是指在Spring MVC应用中如何处理客户端发送的文件上传请求。 @ControllerAdvice注解允许开发者编写...
4. static或public:存放静态资源,如CSS样式、JavaScript脚本、图片等。 5. logs:日志文件夹,记录应用运行时的日志信息。 在实际开发中,开发者还需要理解Maven或Gradle等构建工具的使用,它们能帮助管理和构建...
5. **`<mvc:resources>`**: 用于映射静态资源,如CSS、JavaScript和图片文件,确保它们在部署后可以正确访问。 6. **`<tx:annotation-driven>`**: 如果你的应用程序需要事务管理,这个元素会启用对@Transactional...
Spring还包含了一个强大的数据访问抽象层,支持JDBC、ORM(Object-Relational Mapping)框架如Hibernate,以及对各种消息系统的支持。 Struts2是SSH中的表现层框架,负责处理HTTP请求并转发到相应的业务逻辑。它...
- **WebRoot**目录:Web应用的根目录,包含JSP页面、静态资源(如图片、CSS、JavaScript)。 - **test**目录:可能包含单元测试代码,用JUnit或其他测试框架编写,确保代码功能正确。 5. **配置文件**: - **....
2. `main/resources`:包含非Java资源,如配置文件(application.properties或application.yml)、静态资源(CSS、JavaScript、图片等)和模板文件(Thymeleaf或Freemarker)。`application.properties`或`...
Spring的事务管理功能确保了数据操作的一致性和完整性,而Spring的AOP可以方便地实现如日志记录、权限控制等横切关注点。 Hibernate作为ORM(对象关系映射)框架,将Java对象与数据库中的表进行映射,使得开发者...
- src/main/webapp:Web应用的根目录,包括WEB-INF下的web.xml(Web应用配置)、jsp页面、静态资源(CSS、JS、图片等)。 - pom.xml:如果是Maven项目,这个文件定义了项目的依赖管理和构建过程。 这个博客项目融合...
同时,Spring的AOP可以方便地实现日志记录、权限控制等功能。此外,Spring还提供了对Mybatis的集成支持,简化了数据库操作。 Mybatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,通过XML或注解的方式...
Spring框架则是整个应用的核心,它提供了依赖注入(DI)和面向切面编程(AOP)等核心功能。依赖注入允许开发者在运行时通过配置文件或注解来管理对象之间的依赖关系,降低了组件之间的耦合度。面向切面编程则允许...
- `src/main/webapp`:Web应用的根目录,包含`WEB-INF`目录下的`web.xml`(Web应用部署描述符),`struts.xml`,`jsp`视图页面,以及可能的静态资源如图片、CSS和JavaScript文件。 5. **集成与配置**:Spring、...
- `src/main/webapp`:Web应用目录,包含Web-INF下的web.xml(Web应用配置)、静态资源(CSS、JS、图片)以及JSP页面。 - `db`:数据库脚本,用于初始化或更新数据库表结构。 - `pom.xml`:Maven的项目对象模型,...