2014-10-24 2 views
2

Я новичок в Spring Framework и пытался попробовать несколько примеров, чтобы понять АОП, и вот что я делал до сих пор, но не работал.AOP с использованием AspectJ, не работающего с <aop: aspectj-autoproxy />

Проблема возникает, как только я добавляю <aop:aspectj-autoproxy /> в spring.xml. Моя сборка не отвечает, что не может создать bean-элемент с исключением из null-указателя. Но если я запустил приложение без тега <aop:aspectj-autoproxy />, тогда он отлично работает , но без АОП.

Вот несколько деталей моего проекта. enter image description here

Здесь я AopMain, который является основным классом, работает, LoggingAspect Где я фактически определил до того аспекта Есть две модели Окружность и треугольник ShapeService который фактически использует две вышеупомянутые модели

И Здесь я даю код для них

AopMain:

package com.spring.aop; 

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

import com.spring.service.ShapeService; 

public class AopMain { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    ApplicationContext ctx = new ClassPathXmlApplicationContext("Spring.xml"); 
    ShapeService shapeService = ctx.getBean("shapeService", ShapeService.class); 
    System.out.println(shapeService.getCircle().getName()); 
} 

} 

LoggingAspect:

package com.spring.aspect; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 

@Aspect 
public class LoggingAspect { 

@Before("execution(public String getName())") 
public void loggingAdvice(){ 
    System.out.println("Advice run, Get method called"); 
} 
} 

Круг:

package com.spring.model; 

public class Circle { 

private String name; 

public String getName() { 
    return name; 
} 

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

}

треугольник: То же, что круг с одним атрибутом имени

ShapeService:

package com.spring.service; 

import com.spring.model.Circle; 
import com.spring.model.Triangle; 

public class ShapeService { 

private Circle circle; 
private Triangle triangle; 

public Circle getCircle() { 
    return circle; 
} 
public void setCircle(Circle circle) { 
    this.circle = circle; 
} 
public Triangle getTriangle() { 
    return triangle; 
} 
public void setTriangle(Triangle triangle) { 
    this.triangle = triangle; 
} 


} 

И теперь здесь приходит важный файл Spring.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" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

<aop:aspectj-autoproxy /> 

<bean name="triangle" class="com.spring.model.Triangle"> 
<property name="name" value="Triagnle Name"/> 
</bean> 

<bean name="circle" class="com.spring.model.Circle"> 
<property name="name" value="Circle Name"/> 
</bean> 

<bean name="shapeService" class="com.spring.service.ShapeService" autowire="byName" /> 

<bean name="loggingAspect" class="com.spring.aspect.LoggingAspect"/> 

</beans> 

Am получаю ошибку следующим образом:

Error creating bean with name 'triangle' defined in class path resource [Spring.xml]: Initialization of bean failed; nested exception is java.lang.NullPointerException 

Но если я попытаюсь прокомментировать <aop:aspectj-autoproxy /> линию в Spring.xml и запустить код он может создать компонент. Прошу вас, я пропустил кое-что? В какой-то библиотеке или в какой-то библиотечный конфликт?

что-то делать с <aop:aspectj-autoproxy />

+0

Для начала вы смесительных версии AspectJ не делают этого. Далее вам также понадобится cglib, так как у вас нет интерфейсов, а динамические прокси jdk не будут применяться. Наконец, вы используете довольно старую версию Spring Spring, предлагающую перейти на версию 4.x. –

ответ

-2

Пожалуйста, измените

<aop:aspectj-autoproxy/> 

в

<aop:aspectj-autoproxy ></aop:aspectj-autoproxy> 

в spring.xml file.Hope он должен работать нормально.

+0

они одинаковы – frank

0

Я думаю, что вы ссылаетесь на код от https://javabrains.io/, ваш код не имеет проблем, так как я сделал пример с тем же кодом.

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

1] Вам необходимо установить AspectJ банку после установки вы получите:

я) aspectjrt.jar II) aspectjtools.jar III) aspectjweaver.jar IV) org.aspectj.matcher.jar

2] Теперь мы должны использовать aspectjrt.jar и aspectjweaver.jar

в вашем коде, вы также включили aspectj.jar, который не требуется, и еще одна вещь aspectj.jar и aspectjrt.jar версия отличается d не включайте aspectjrt.jar и aspectjweaver.jar непосредственно из Интернета.

Установите aspectj.jar, а затем включить обе банки, которые находятся в бин папке AspectJ

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