3

我是 Spring 框架的新手,正在尝试一些示例示例来理解 AOP,这是我到目前为止所做的,但它不起作用。

问题是,一旦我添加<aop:aspectj-autoproxy />到 spring.xml,我的构建就会失败,说无法创建带有空指针异常的 bean。但是如果我在没有<aop:aspectj-autoproxy />标签的情况下运行应用程序,那么它运行良好但没有 AOP。

以下是我的项目的一些细节。 在此处输入图像描述

这里我有 AopMain ,它是运行的主类 LoggingAspect 我实际上定义了之前的方面 有两个模型 Circle 和 Triangle ShapeService 它实际上使用了上述两个模型

这里是给他们的代码

奥普主要:

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

0

我认为您指的是来自https://javabrains.io/的代码,您的代码没有问题,因为我已经使用相同的代码完成了示例。

最初,我也面临同样的问题,但后来我想出了解决方案。

1]你需要安装aspectj jar,安装后你会得到:

i)aspectjrt.jar ii)aspectjtools.jar iii)aspectjweaver.jar iv)org.aspectj.matcher.jar

2]现在我们需要使用aspectjrt.jar和aspectjweaver.jar

在您的代码中,您还包含了不需要的 aspectj.jar,还有一点aspectj.jar 和 aspectjrt.jar 版本不同,不要直接从 Internet 包含 aspectjrt.jar 和 aspectjweaver.jar。

安装 aspectj.jar,然后包括在 aspectj 的 bin 文件夹中的两个 jar

于 2017-09-21T10:47:04.707 回答
-3

请更换

 <aop:aspectj-autoproxy/>

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

spring.xml文件中。希望它可以正常工作。

于 2015-06-19T16:49:28.060 回答