spring中的aop简单编程

一、为什么要使用AOP编程?

    1)、把横切关注点与业务逻辑分离,独立模块化;

    2)、不改变当前代码而可以动态添加功能;

    3)、可拓展性强

二、spring框架中使用AOP

    1)、aop-*.xml配置切面

        <!-- 自动扫描包开启注解 -->
<aop:config proxy-target-class="true" />
<context:annotation-config />
<bean id="logService" class="com.test.aop.LogService" />

        <!-- 用户操作日志切面 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.test.admin.controller.*.*(..)) and @annotation(logInfo)" id="pointcutSysLog" />
<aop:aspect ref="logService">
<aop:after-returning method="afterSysLog" pointcut-ref="pointcutSysLog" />
</aop:aspect>
</aop:config>

    2)、aop切面方法

 public class LogService {

public static final Logger log = Logger.getLogger(LogService.class);

//保存日志的实现类

@Resource
SysLogService sysLogService;

/**
* 操作日志

* @param list
* @param title
* @param content
*/
public void afterSysLog(JoinPoint point, Log logInfo) {
// 拦截的放参数类型
String authorizeCaseInfoIds = null;
HttpServletRequest request = null;
log.info("方法参数:" + point.getArgs() + "*******注解参数:" + logInfo.menuName() + "****操作类型*****" + logInfo.operType());
try {
for (Object obj : point.getArgs()) {
if (obj instanceof HttpServletRequest) {
request = (HttpServletRequest) obj;
}
if (obj instanceof String[]) {
authorizeCaseInfoIds = Arrays.toString((String[]) obj);
}
if (obj instanceof Integer[]) {
authorizeCaseInfoIds = Arrays.toString((Integer[]) obj);
}
}

                //自定义entity
UsersInfo usersInfo = (UsersInfo) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (usersInfo != null) {
SysLog cLog = new SysLog();
cLog.setCreateTime(new Date());
cLog.setOperationUrl(request.getRequestURI() + request.getQueryString());
cLog.setLoginIp(request.getRemoteAddr());
cLog.setLoginTime(new Date());
if (StringUtils.hasText(authorizeCaseInfoIds)) {
cLog.setLoginOperator(logInfo.desc() + authorizeCaseInfoIds);
} else {
cLog.setLoginOperator(logInfo.desc());
}
cLog.setCreater(usersInfo.getUserName());
cLog.setLoginName(usersInfo.getUserName());
sysLogService.save(cLog);
}
} catch (Exception e) {
log.debug("转换错误:" + e.getMessage() + "*******注解参数:" + logInfo.menuName() + "****操作类型*****" + logInfo.operType());
}
}
}

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值