java - 投入AOP后

标签 java spring spring-aop

我有一个名为“LoginException”的自定义异常。它可能从任何类中抛出。所以我想建议在 throw 后做一些事情(例如,打印“Ooops”)。所以我决定使用AOP。像这样:

@Aspect
public class LogoutAdvice {

    @AfterThrowing(throwing = "e")
    public void myAfterThrowing(JoinPoint joinPoint, LoginException e) {    
        System.out.println("IDS HABBENING");
    }
}

代码:

@Transactional
    public DynamicTable getTable(int status_id, HttpServletRequest request)
            throws HibernateException, LoginException, SQLException {
        try {
            ResultSet rs = requestDAO.getRequestResultSet(
                    cookieDAO.get(SESS_ATTR, request), status_id);
            DynamicTable dt = new DynamicTable();
            String[] columnArray;
            LinkedList<String[]> dataList = new LinkedList<String[]>();
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
            columnArray = new String[columnCount - META_COLUMNS_COUNT];
            for (int i = 0; i < columnArray.length; i++) {
                columnArray[i] = rsmd.getColumnName(META_COLUMNS_COUNT + i + 1);
            }
            dt.setTitleArray(columnArray);

            while (rs.next()) {

                String[] dataArray = new String[columnArray.length];
                for (int i = 0; i < columnArray.length; i++) {
                    dataArray[i] = ParamUtil.toString(rs
                            .getObject(META_COLUMNS_COUNT + i + 1));
                }

                dataList.add(dataArray);

            }
            dt.setDataList(dataList);

            return dt;
        } catch (SQLException e) {
            String message = e.getMessage();
            String[] errorsArray = AuthErrorsConst.ERROR;
            for (int i = 0; i < errorsArray.length; i++) {
                if (message.contains(errorsArray[i])) {
                    throw new LoginException(); // LOOK AT THIS

                }
            }
            throw e;
        }

    }

我该怎么做?

最佳答案

确保异常被抛出

catch (SQLException e) {
      String message = e.getMessage();
      String[] errorsArray = AuthErrorsConst.ERROR;
      for (int i = 0; i < errorsArray.length; i++) {
          if (message.contains(errorsArray[i])) {
              System.out.println("throwing LoginException")// NEW
              throw new LoginException(); // LOOK AT THIS
          }
      }
      throw e;
}

关于

@Aspect
public class LogoutAdvice {

    @AfterThrowing(throwing = "e")
    public void myAfterThrowing(JoinPoint joinPoint, LoginException e) {    
        System.out.println("IDS HABBENING");
    }
}

请确定 Spring 已启用与@Aspect 一起工作,并且此外它能够扫描您的LogoutAdvice方面,通常我如何声明它们

@Aspect
@Component// to be scanned by Spring
public class LogoutAdvice {

将您的@AfterThrowing 更改为

@AfterThrowing(pointcut = "execution(* *.*(..))",throwing = "e")

关于java - 投入AOP后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25975520/

相关文章:

java - 缺少日期范围

java.lang.NoClassDefFoundError : org/springframework/cloud/test/TestSocketUtils after upgrading Spring Boot version to 3. x

java - 事务的 Spring 自注入(inject)

Java:隐式类型转换,或隐式 toString() 调用

java - 如果Aspect位于Spring Boot中的不同模块中,则不会执行

java - 在 for 循环中,我的 if 语句没有产生我想要的结果

java - 在 try catch block 中返回。正确吗?

java - 创建bean时出错: Unsatisfied dependency expressed through constructor parameter 1

java - Spring Webflow适合异步吗?流量?

java - 我只是不明白为什么在检查单选按钮时没有出现 edittext