Haris Mehmood
Haris Mehmood

Reputation: 902

Spring Aop "Around.class" Class Not Found Exception

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1095)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1040)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:505)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:220)
    at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:615)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:465)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.springaoppractice.aop.AopMain.main(AopMain.java:12)

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1088)
    ... 13 more
Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
    at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.<clinit>(ReflectiveAspectJAdvisorFactory.java:74)
    at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.<init>(AnnotationAwareAspectJAutoProxyCreator.java:53)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
    ... 15 more

I can not figure out why am I getting this error my AspectJ Lib includes following jars:

Here is my main method:

package com.springaoppractice.aop;

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

import com.springaoppractice.aop.service.ShapeService;

public class AopMain {

    public static void main (String[] args){

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

    }
}

Here is my Aspect:

package com.springaoppractice.aop.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("Logging advice initiazlied, get method is called!");
    }
}

Heres my ServiceClass:

package com.springaoppractice.aop.service;

import com.springaoppractice.aop.model.Circle;
import com.springaoppractice.aop.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;
    }
}

Here are my model:

package com.springaoppractice.aop.model;

public class Circle {

    private String name;

    public String getName(){
        return name;
    }

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

package com.springaoppractice.aop.model;

public class Triangle {

    private String name;

    public String getName() {
        return name;
    }

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

}

Here is my 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-4.1.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <aop:aspectj-autoproxy/>

    <bean name="triangle" class="com.springaoppractice.aop.model.Triangle">
        <property name="name" value="TRIANGLE NAME" />
    </bean>

    <bean name="circle" class="com.springaoppractice.aop.model.Circle">
        <property name="name" value="CIRCLE NAME" />
    </bean>

    <bean name="shapeService" class="com.springaoppractice.aop.service.ShapeService" autowire="byName" />
    <bean name="loggingAspect" class="com.springaoppractice.aop.aspect.LoggingAspect" />



</beans>

Jars that are added to classpath: AspectJ Jars

Upvotes: 1

Views: 15782

Answers (5)

user6091735
user6091735

Reputation:

I had the same problem and im sure you are following java brains as i am :) just change the aopalliance -jar to aopalliance1.0-jar it works for me.

Upvotes: 1

Sandeep Tengale
Sandeep Tengale

Reputation: 162

Thanks for this question, I encounterd exactly the same error, its purely the Jar error. I resolved this issue by using asm-3.3.1.jar, aspectjrt.jar, cglib-3.1.jar, aopalliance-1.0.jar and aspectweaver-1.7.2.jar. I think its aopalliance and aspectweaver dependency which causes this error. Hope its helpful

Upvotes: 1

Yegor  Dovganich
Yegor Dovganich

Reputation: 108

Had the same error. I downloaded aopalliance-1.0-sources.jar and aspectjweaver-1.7.1-sources.jar instead of aopalliance-1.0.jar and aspectjweaver-1.7.1.jar (without "source"). After downloading proper jars (@kriegaex links) it works well.

Upvotes: 1

Naseer
Naseer

Reputation: 31

So I was having the same issue due to incorrect aopalliance jar. What I had earlier was aopalliance-alpha1.jar

But then I changed it to aopalliance-1.0.jar which you can download from http://mvnrepository.com/artifact/aopalliance/aopalliance/1.0

The program is working for me.

Upvotes: 3

kriegaex
kriegaex

Reputation: 67487

For me it works nicely with this on the classpath (I did not use Maven on purpose and manually added all libs in Eclipe in order to replicate your setup):

Eclipse build path

The aspect's output appears on the console as expected. Maybe you want to compare your libs to mine. I strongly recommend to use Maven as a build tool though. This way you have more control over your dependencies.

Edit: I forgot to mention that my Eclipse project is an AspectJ project, not a normal Java project. I.e. I use ajc as a compiler, not javac. The result is compile-time weaving. If you want to use load-time weaving, please tell me and I will test it that way.

Edit 2: I have just converted my project to a normal Java project, i.e. javac compiles all classes/aspects and Spring AOP with LTW are now used to apply aspects. It still works flawlessly. My current library setup looks like this:

enter image description here

Upvotes: 1

Related Questions