2017-01-19 3 views
1

Hier sind Klassen und XML-Konfiguration für Java/AspectJ-Demoprojekt, aber es schlägt fehl. Projekt ist in Eclipse gebaut. Ich suchte im Internet, fügte alle Bibliotheken hinzu, aber es schlägt immer noch fehl. Irgendeine Idee, was könnte falsch sein?AspectJ Der Verweis auf Bean 'selectAll' konnte nicht aufgelöst werden

UPDATE: Diese Klassen wurden hinzugefügt aspectj Projekt Eclipse: aopalliance.jar asm.jar aspectj.jar aspectjrt.jar aspectjtools.jar aspectjweaver.jar cglib.jar org.aspectj.matcher. jar

Klasse MainApp:

package com.tutorialspoint; 

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

public class MainApp { 
    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); 
     Student student = (Student) context.getBean("student"); 
     student.getName(); 
     student.getAge(); 
     student.printThrowException(); 
    } 
} 

Klasse Protokollierung:

package com.tutorialspoint; 

public class Logging { 

    /** 
    * This is the method which I would like to execute before a selected method 
    * execution. 
    */ 
    public void beforeAdvice() { 
     System.out.println("Going to setup student profile."); 
    } 

    /** 
    * This is the method which I would like to execute after a selected method 
    * execution. 
    */ 
    public void afterAdvice() { 
     System.out.println("Student profile has been setup."); 
    } 

    /** 
    * This is the method which I would like to execute when any method returns. 
    */ 
    public void afterReturningAdvice(Object retVal) { 
     System.out.println("Returning:" + retVal.toString()); 
    } 

    /** 
    * This is the method which I would like to execute if there is an exception 
    * raised. 
    */ 
    public void AfterThrowingAdvice(IllegalArgumentException ex) { 
     System.out.println("There has been an exception: " + ex.toString()); 
    } 
} 

Klasse Student:

package com.tutorialspoint; 

public class Student { 
    private Integer age; 
    private String name; 

    public void setAge(Integer age) { 
     this.age = age; 
    } 

    public Integer getAge() { 
     System.out.println("Age : " + age); 
     return age; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     System.out.println("Name : " + name); 
     return name; 
    } 

    public void printThrowException() { 
     System.out.println("Exception raised"); 
     throw new IllegalArgumentException(); 
    } 
} 

beans.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 "> 

    <aop:config> 
     <aop:aspect id="log" ref="logging"> 
     <aop:pointcut id="selectAll" 
     expression="execution(* com.tutorialspoint.*.*(..))"/> 
     <aop:before pointcut-ref="selectAll" method="beforeAdvice"/> 
     <aop:after pointcut-ref="selectAll" method="afterAdvice"/> 
     <aop:after-returning pointcut-ref="selectAll" 
           returning="retVal" 
           method="afterReturningAdvice"/> 
     <aop:after-throwing pointcut-ref="selectAll" 
          throwing="ex" 
          method="AfterThrowingAdvice"/> 
     </aop:aspect> 
    </aop:config> 

    <!-- Definition for student bean --> 
    <bean id="student" class="com.tutorialspoint.Student"> 
     <property name="name" value="Zara" /> 
     <property name="age" value="11"/>  
    </bean> 

    <!-- Definition for logging aspect --> 
    <bean id="logging" class="com.tutorialspoint.Logging"/> 

</beans> 

Stapelüberwachung:

Jan 19, 2017 9:43:02 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]27bc2616: startup date [Thu Jan 19 21:43:02 CET 2017]; root of context hierarchy 
Jan 19, 2017 9:43:02 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [Beans.xml] 
Jan 19, 2017 9:43:02 PM org.springframework.context.support.ClassPathXmlApplicationContext refresh 
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.aspectj.AspectJPointcutAdvisor#0': Cannot create inner bean '(inner bean)#aec6354' of type [org.springframework.aop.aspectj.AspectJMethodBeforeAdvice] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#aec6354': Cannot resolve reference to bean 'selectAll' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'selectAll': Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.aspectj.AspectJPointcutAdvisor#0': Cannot create inner bean '(inner bean)#aec6354' of type [org.springframework.aop.aspectj.AspectJMethodBeforeAdvice] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#aec6354': Cannot resolve reference to bean 'selectAll' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'selectAll': Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:648) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1154) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1056) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.tutorialspoint.MainApp.main(MainApp.java:8) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#aec6354': Cannot resolve reference to bean 'selectAll' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'selectAll': Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1154) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1056) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299) 
    ... 17 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'selectAll': Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) 
    ... 25 more 
Caused by: java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.<clinit>(AspectJExpressionPointcut.java:87) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108) 
    ... 31 more 

Antwort

1

Es ist ein langer Stack-Trace, aber der wichtigste Teil ist die NoClassDefFoundError am Ende:

Caused by: java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive at org.springframework.aop.aspectj.AspectJExpressionPointcut.(AspectJExpressionPointcut.java:87) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108) ... 31 more

Das ist die AspectJ Klassen zeigt den JVM auf dem Runtime-Classpath nicht verfügbar waren. Wenn diese Anwendung aufgerufen wird, müssen Sie sicherstellen, dass sich die Datei aspectjweaver.jar im Klassenpfad der Laufzeit befindet. Für ein von Maven verwaltetes Projekt können Sie es als Abhängigkeit in pom.xml angeben. Bei Verwendung von Eclipse besteht die andere Möglichkeit darin, aspectjweaver.jar (und alle zugehörigen Abhängigkeiten) herunterzuladen und direkt als externe Bibliothek dem Eclipse-Projekt hinzuzufügen.

+0

wurden diese Klassen hinzugefügt aspectj Projekt Eclipse: aopalliance.jar asm.jar aspectj.jar aspectjrt.jar aspectjtools.jar aspectjweaver.jar cglib.jar org.aspectj.matcher.jar –

+0

I gerade verifiziert durch Ausführen von 'jar tf', dass die' org.aspectj.weaver.tools.PointcutPrimitive' Klasse in aspectjweaver.jar liegt, die du bereits erwähnt hast. Meine beste Theorie ist, dass es entweder durch die Eclipse-Konfiguration irgendwie nicht in den Klassenpfad der Laufzeit übergeht, oder dass es eine Versionskonflikt ist, so dass es sich um eine Version des JAR handelt, die die Klasse nicht wirklich enthält. –

+1

Vermutlich nicht übereinstimmende Version oder beschädigte libm, weil ich beide (vorher) heruntergeladene Bibliotheken hatte und dann AJDT hinzugefügt habe (welches auch diese Bibliotheken hat). Wie auch immer, ich habe referenzierte Bibliotheken von Eclipse gelöscht, fügte sie zurück (nur von AJDT und jetzt funktioniert es. Danke! –

Verwandte Themen