-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没有太多的知识,我现在是学习者......所以请在这个问题上需要一些帮助。感谢您的耐心阅读...