2016-12-31 3 views
0

В настоящее время я использую Spring 4.3.4 для выполнения «Простой примерный пример программы». Я попытался использовать как XML, так и Annotation, но это дает мне ошибку BeanCreationException.Проблема зависимостей AOP весной 4.3.4

Ошибка создания боб с именем 'org.springframework.aop.config.internalAutoProxyCreator'

Я добавил ниже упомянутых зависимостей:

  • весна-ядро 4.3.4
  • весна-фасоль 4.3.4
  • spring-context 4.3.4
  • весна-аспекты 4.3.4

Главная:

public class Main { 
    public static void main(String[] args) { 
     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/sonyx64/spring/aop/config/Beans.xml"); 
     Camera camera = (Camera) context.getBean("camera"); 
     camera.snap(); 
     context.close(); 
    }} 

камеры Класс:

public class Camera { 
    public void snap() { 
     System.out.println("SNAP!"); 
    } 
} 

Logger Класс:

public class Logger { 
    public void aboutToTakePhoto() { 
     System.out.println("About To Take Photo"); 
    } 
} 

beans.xml

<bean id="camera" class="com.sonyx64.spring.aop.Camera"></bean> 
    <bean id="logger" class="com.sonyx64.spring.aop.Logger"></bean> 
    <aop:config> 
     <aop:pointcut expression="execution(void com.sonyx64.spring.aop.Camera.snap())" 
      id="camerasnap" /> 
     <aop:aspect id="loggeraspect" ref="logger"> 
      <aop:before method="aboutToTakePhoto" pointcut-ref="camerasnap" /> 
     </aop:aspect> 
    </aop:config> 

Пожалуйста, предложите мне соответствующее решение, чтобы иметь дело с этим исключением.

+1

Просьба показать фактический код: код приложения Java, аспект (ы), конфигурацию Spring и AOP (XML или аннотация). Это StackOverflow, а не викторина. ;-) – kriegaex

+0

Пожалуйста, поделитесь своим мнением. – vijayraj34

+0

@kriegaex Это работает, когда я модифицировал aspectjweaver-1.8.9.jar (поставляется с пакетом maven с атрибутами spring-aspect) с aspectjweaver-1.5.4.jar в файле POM. – vijayraj34

ответ

-1

Проблема связана с конкретной версией maven repository jar "aspectjweaver-1.8.9.jar". Работа с предыдущей версией 1.8.8 решила проблему.

pom.xml:

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.5.1</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <properties> 
    <maven.target.source>1.8</maven.target.source> 
    <maven.target.compiler>1.8</maven.target.compiler> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.3.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>4.3.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.3.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>4.3.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>1.8.8</version> 
    </dependency> 
    </dependencies> 
+2

Трудно представить (так трудно поверить), почему 1.8.8 будет работать, если 1.8.9 не потому, что последний является лишь небольшим выпуском исправления для первого. Я предполагаю, что вы тоже изменили что-то еще. Не могли бы вы рассказать о своей среде? Версия Java, версия Spring и т. Д. Как выглядит ваш POM? – kriegaex

+0

И теперь, если вы измените 1.8.8 на 1.8.9 и ничего больше (!), Ошибка повторится? Я прошу этот проницательный путь, потому что я действительно хочу убедиться. Если это действительно так, вы, возможно, обнаружили ошибку в AspectJ или попали в проблему несовместимости, которая, как я уже сказал, трудно себе представить. – kriegaex

+1

Как я думал: версия weaver AspectJ не является причиной вашей проблемы. Я просто пытался, используя именно ваш код и ваш POM. Независимо от того, использую ли ящик 1.8.8 или 1.8.9, или если я полностью удалю зависимость от ПОМ, он прекрасно работает во всех случаях. Поэтому ваш собственный ответ ** неправильный **. Пожалуйста, узнайте, какую ошибку вы действительно сделали, отменив свои изменения до тех пор, пока вы снова не нажмете ошибку, затем сравните с текущим решением и сообщите здесь в новом ответе. – kriegaex

2

Ткач версия AspectJ не является причиной вашей проблемы. Я просто пытался, используя ваш код и ваш POM. Независимо от того, использую ли ящик 1.8.8 или 1.8.9, или если я полностью удалю зависимость от ПОМ, он прекрасно работает во всех случаях. К сожалению, ваш собственный ответ неверен.

После того как вы загрузили свой проект на Google Диск, я мог легко увидеть причину проблемы: у вас есть проблема Maven. Вы не используете стандартный макет каталога Maven, чтобы сделать Maven найти ресурсы, такие как beans.xml в каталоге src/main/resources. Просто проверьте цель/классы и JAR, созданные Maven: no beans.xml там. Поэтому, пожалуйста, просто исправить макет каталога, чтобы выглядеть примерно так:

Maven directory layout

Это то, что я сделал, и удаляя <sourceDirectory> директиву из POM. Кроме того, вы можете настроить каталог настраиваемых ресурсов, настроив Maven Resource Plugin.


P.S .: В следующий раз, пожалуйста, разместите свою полную трассировку стека, а не только часть сообщения об ошибке. Или, по крайней мере, прочитать свои собственные сообщения об ошибках. ;-) Там у вас есть очень четко (я намеренно добавил некоторые разрывы строк):

INFORMATION: Loading XML bean definitions from class path resource [com/pop/spring/aop/Beans.xml] 
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: 
    IOException parsing XML document from class path resource [com/pop/spring/aop/Beans.xml]; 
    nested exception is 
     java.io.FileNotFoundException: 
      class path resource [com/pop/spring/aop/Beans.xml] 
      cannot be opened because it does not exist 
+0

Я не думаю, что это может быть заминка. Так как я использую 'ClassPathXmlApplicationContext контекст = новый ClassPathXmlApplicationContext («ком/поп/весна/АОП/beans.xml»);' И нет никаких проблем при загрузке контекста и я никогда не сталкивался с этой ошибкой загрузки XML , Вы можете четко видеть в прикрепленном файле LOG 'Ошибка создания bean с именем 'camera', определенным в ресурсе пути к классу [com/pop/spring/aop/Beans.xml]:' это означает, что контекст загружен успешно и не удалось создайте компонент по имени _camera_. – vijayraj34

+0

Но это то, что я вижу, когда импортирую проект Eclipse и запускаю 'Main' из среды IDE. Как вы начинаете свое приложение? P.S .: Я уверен, что ваш макет каталога неправильный в сочетании с POM. Он может работать из среды IDE, но, конечно же, не из JAR. – kriegaex

+0

Да, я использую Eclipse IDE. Я просто делаю «Запускать как приложение» из файла Main.java. – vijayraj34

0

Я пытался тем же пример, что я сделал первый я создал проект Maven и во-вторых, для аспекта ткачей зависимостей я добавил исключение для версии 1.8.8 версии aspectjweaver и включена версия aspectjweaver 1.8.9, и она сработала.

+0

Этот ответ неверен, см. [Мой собственный ответ] (https://stackoverflow.com/a/41422418/1082681). Я пробовал и работал с обеими версиями. Я также объяснил, что здесь действительно не так. У вас, должно быть, была другая проблема. – kriegaex

Смежные вопросы