Java Spring AOP: не в состоянии использовать catch и, наконец, в целевом классе - PullRequest
0 голосов
/ 05 января 2012

Я разработал приложение для БД, но необходимо обработать исключение при подключении к БД с помощью Spring AOP, классы, которые я показал, показаны ниже

LoginInterface.java

LoginInterface(){
   ApplicationContext  context = new ClassPathXmlApplicationContext("LoginApp.xml");
   Login login = (Login) context.getBean("Login");
   login.loginMethod(username,password);
 }

Login.java
{
    loginMethod(String username, char[] pwd) throws ClassNOtFoundException, SQLException{
     try{
            ...
     }
    }
 }

LoginProfiler.java

package dbapp;

import java.sql.SQLException;

import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.JoinPoint;



  @Aspect
public class LoginProfiler {

  @Pointcut("execution(* dbapp.Login.loginMethod(String, char[])throws java.lang.ClassNotFoundException, java.sql.SQLException)")
   public void loginMethod(){}

   @Around("loginMethod()")
    public void handleException(final ProceedingJoinPoint pJoinPoint )throws Throwable{

       try{

           pJoinPoint.proceed();

      }catch(Exception e) {


         if((e.getCause().toString()).contains("UnknownHostException") ){

              System.out.println("Unknown Host ");

         }else if((e.getCause().toString()).contains("ConnectException")){        
              System.out.println("Connection Problem ");

        }   
     }
   }

}

LoginApp.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"

        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
        default-destroy-method="destroy"
        default-init-method="afterPropertiesSet"
        default-autowire="byName">



        <!-- Enable the @AspectJ support -->
        <aop:aspectj-autoproxy />

        <bean id="LoginProfiler" class="dbapp.LoginProfiler" />
        <bean id="Login" class="dbapp.Login" />
</beans>

Привет, так как мне нужно перебрасывать исключение в catch для обработки аспектом, если я использую после броска совета, я использую вокруг совета вместо после броска, он работает нормально, но проблема в том, что я не должен использовать catch или наконец, в целевом классе, кто-нибудь может мне помочь решить это. Спасибо

1 Ответ

1 голос
/ 05 января 2012

Вы не можете сделать это: код, который вызывает метод, генерирующий проверенное исключение, должен перехватить исключение или объявить его как выброшенный - это просто способ Java.изменить требования самой Java, хотя это может изменить поведение runtime .Вы можете обработать исключение в совете, но это не меняет требований к уровню источника, налагаемых Java.

...