Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring-java.lang.IllegalArgumentException_Java_Spring_Aop_Illegalargumentexception - Fatal编程技术网

Spring-java.lang.IllegalArgumentException

Spring-java.lang.IllegalArgumentException,java,spring,aop,illegalargumentexception,Java,Spring,Aop,Illegalargumentexception,这让我发疯——我已经研究并发现了类似错误的帖子,但似乎没有一个解决方案适合我 输出: 2014年4月11日8:59:07 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息:刷新org.springframework.context.support。ClassPathXmlApplicationContext@3bb2b8:启动日期 [美国东部时间2014年4月11日星期五20:5

这让我发疯——我已经研究并发现了类似错误的帖子,但似乎没有一个解决方案适合我

输出:

2014年4月11日8:59:07 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息:刷新org.springframework.context.support。ClassPathXmlApplicationContext@3bb2b8:启动日期
[美国东部时间2014年4月11日星期五20:59:07];上下文层次结构的根
2014年4月11日晚上8:59:07 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息:从类路径资源[applicationContext.XML]加载XMLBean定义
2014年4月11日晚上8:59:08
org.springframework.beans.factory.support.DefaultListableBeanFactory预实例化单例
信息:在org.springframework.beans.factory.support中预实例化单例。DefaultListableBeanFactory@104c575:定义bean[departmentDAO、departmentService、securityAspect、org.springframework.aop.config.internalAuto ProxyCreator];工厂层次结构的根
2014年4月11日8:59:08 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry销毁单例
信息:在rg.springframework.beans.factory.support中销毁单例。DefaultListableBeanFactory@104c575:定义bean[departmentDAO、departmentService、securityAspect、org.springframework.aop.config.internalAutoProxyCreator];工厂层次结构的根
线程“main”org.springframework.beans.factory.BeanCreationException中出现异常:创建名为“departmentDAO”的bean时出错,该名称在类路径资源[applicationContext.xml]中定义:初始化bean失败;嵌套异常为java.lang.IllegalArgumentException:警告与此类型名称不匹配:coreservlet.aopaspj.service.DepartmentService[Xlint:InvalidaBSolutionPename]
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:562)
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)
位于coreservlets.aopaspj.ExerciseRunner.main(ExerciseRunner.java:11)
原因:java.lang.IllegalArgumentException:警告与此类型名称不匹配:coreservlet.aopaspj.service.DepartmentService[Xlint:InvalidaBSolutionPename]
位于org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:317)
位于org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:204)
位于org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:191)
位于org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:172)
位于org.springframework.aop.support.AopUtils.canApply(AopUtils.java:198)
位于org.springframework.aop.support.AopUtils.canApply(AopUtils.java:252)
在org.springframework.aop.support.AopUtils.FindVisorsThatCanApp上(AopUtils.java:284)
可在org.springframework.aop.framework.autoproxy.AbstractAdvisoruToproxyCreator.FindVisors上应用(AbstractAdvisoruToproxyCreator.java:117)
位于org.springframework.aop.framework.autoproxy.AbstractAdvisorautorProxyCreator.findEligibleAdvisors(AbstractAdvisorautorProxyCreator.java:87)
位于org.springframework.aop.framework.autoproxy.AbstractAdvisoruToproxyCreator.GetAdvices和AdvisorForBean(AbstractAdvisoruToproxyCreator.java:68)
位于org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359)
位于org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:404)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
... 还有11个
SecurityAspect.java

package coreservlets.aopaspj.aspect;

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

import coreservlets.aopaspj.exception.InvalidEmployeeException;

@Aspect
public class SecurityAspect {
    @SuppressWarnings("unused")
    @Pointcut("execution(* coreservlets.aopaspj.service.DepartmentService.getDepartment(..) )")
    private void getDepartmentPointcut(){}

    @Before("getDepartmentPointcut() && args(employeeId, lastName)")
        public void verifyEmployee(long employeeId, String lastName) throws InvalidEmployeeException {
            if (!((employeeId == 1) && lastName.equals("Smith") || (employeeId == 2) && lastName.equals("Jones"))) {
                throw new InvalidEmployeeException();
            }

        }

}
package coreservlets.aopaspj;

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

import coreservlets.aopaspj.service.DepartmentServiceImpl;

public class ExerciseRunner {
public static void main(String[] args) {

    ApplicationContext springContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    DepartmentServiceImpl departmentService = 
            springContext.getBean("departmentService", DepartmentServiceImpl.class);

    long employeeId = 1;
    String lastName = "Smith";

    System.out.println(departmentService.getDepartment(employeeId, lastName));

    }
}
applicationContext.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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

<bean id="departmentDAO" class="coreservlets.aopaspj.dao.DepartmentDAOImpl" />

<bean id="departmentService"
    class="coreservlets.aopaspj.service.DepartmentServiceImpl">
    <property name="departmentDAO" ref="departmentDAO" />
</bean>

<bean id="securityAspect" class="coreservlets.aopaspj.aspect.SecurityAspect" />

<aop:aspectj-autoproxy/>

调用堆栈会告诉你原因:

Initialization of bean failed; nested exception is
    java.lang.IllegalArgumentException: warning no match for this type name:
    coreservlets.aopaspj.service.DepartmentService [Xlint:invalidAbsoluteTypeName]

在我看来,似乎在一个方面切入点中使用了类似于
Foo
的类名,但SpringAOP需要一个完全限定的类名,如
com.blah.Foo
。因为您还没有发布方面代码,所以很难说。我不是Spring用户,但这也是AspectJ中的一个常见陷阱,特别是如果您不使用本机语法(可以使用常规导入来缩短切入点中的类名),而是使用注释样式语法。后者需要完全限定的类名。

或者切换到更易于调试的基于java的配置:)我建议,不是作为解决方案,而是作为