2014-10-30 67 views
-1

我有一个帐户业务服务,我在其中编写我的业务需求。并为企业服务,我有一个建议类SecurityCheck的在类路径资源中定义名称为'as'的bean时出错

package com.jlcindia.spring.bservices; 

public class AccountService { 
    public void getBal() { 
     System.out.println("Get bal is successfull"); 
    } 
    public void myDeposit() { 
     System.out.println("MY Deposit is successfull"); 
    } 
    public void myWithdraw() throws Exception { 
     System.out.println("WIthdraw begin"); 
     int i=0; 
     if (i == 1){ 
      throw new InSufficientFundsException(); 
     } 
     System.out.println("WIthdraw end"); 
    } 

} 

建议类如下:

package com.jlcindia.spring.mservices; 

import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 

@Aspect 
public class SecurityService { 

    @Pointcut(value="execution(* com.jlcindia.spring.bservices.AccountService.my*(..))") 
    public void pc1(){} 
    @Pointcut(value="execution(* com.jlcindia.spring.bservices.CustomerService.del*(..))") 
    public void pc2(){} 

    @Around("pc1() or pc2()") 
    public void verifyUser(ProceedingJoinPoint pjp) throws Throwable{ 
     System.out.println("SS-verifyUser()-Begin"); 
     pjp.proceed(); 
     System.out.println("SS-verifyUser()-END"); 
    } 
} 

我用注释-config.xml中文件来配置业务服务和咨询类如下:

<bean id="as" class="com.jlcindia.spring.bservices.AccountService" /> 
<bean id="security" class="com.jlcindia.spring.mservices.SecurityService"/> 

下面是测试它的代码:

package com.jlcindia.spring.aop; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import com.jlcindia.spring.bservices.AccountService; 

public class Client { 
    public static void main(String[] args) { 
     ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml"); 
     AccountService ast = (AccountService)ctx.getBean("as"); 
     ast.myDeposit(); 
     ast.getBal(); 
     try{ 
      ast.myWithdraw(); 
     }catch(Exception e){ 
      System.out.println("***sorry****"); 
     } 
    } 
} 

当我运行我的客户端代码来测试服务,无论是建议是否应用我得到这个异常;

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'as' defined in class path resource [application-context.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut pc1 

完整的堆栈跟踪是:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'as' defined in class path resource [application-context.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut pc1 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.jlcindia.spring.aop.Client.main(Client.java:11) 
Caused by: java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut pc1 
    at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:316) 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:195) 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:181) 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:162) 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:200) 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:254) 
    at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:286) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:117) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:87) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68) 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359) 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1426) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    ... 11 more</h3> 

请帮忙找出原因,同时创造豆“为”(帐户服务)这个错误发生的历史。我对AOP没有太多的知识,我现在是学习者......所以请在这个问题上需要一些帮助。感谢您的耐心阅读...

回答

1

您的切入点存在语法错误。请更改

@Around("pc1() or pc2()") 

@Around("pc1() || pc2()") 

PS:也请少用乱源代码和散文文本格式下一次,我花了5+分钟编辑您的问题,以使它对我自己和其他人更具可读性。

相关问题