3

私はSpring Frameworkが初めてで、AOPを理解するためにいくつかのサンプル例を試していました.これが私が今までやったことですが、うまくいきません.

問題は、<aop:aspectj-autoproxy />spring.xml に追加するとすぐにビルドが失敗し、null ポインター例外で Bean を作成できないということです。<aop:aspectj-autoproxy />しかし、タグなしでアプリを実行すると、正常に動作しますが、AOP はありません。

これが私のプロジェクトの詳細です。 ここに画像の説明を入力

ここでは、実行するメイン クラスである AopMain があります。LoggingAspect ここで、実際に前のアスペクトを定義 しました。上記の 2 つのモデルを実際に使用する 2 つのモデル Circle と Triangle 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());
}

}

ロギングアスペクト:

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;
}

}

三角形: 単一の属性名を持つ円と同じ

シェイプ サービス:

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>

次のようにエラーが発生します。

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 の行にコメントを付けてコードを実行すると、Bean を作成できます。何か足りないものがありますか?いくつかのライブラリですか、それともいくつかのライブラリの競合ですか?

何か関係がある<aop:aspectj-autoproxy />

4

2 に答える 2