AOP main program throws a BeanCurrentlyInCreationException

I am creating a simple AOP program and starting with this exception is BeanCurrentlyInCreationException .

Here is my code:

MyAspect.java

 package aspect; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect //@Component public class MyAspect { @Pointcut("execution(public * *(..))") private void anyPublicOperation() { } @Before("anyPublicOperation()") private void beforePointCut(){ System.out.println("Inside before pointcut of MyAspect"); } } 

Calculator.java

 package program; import org.springframework.stereotype.Component; @Component public class Calculator { public int add(int i, int j) { return i + j; } } 

Config.java

 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import aspect.MyAspect; @Configuration //Enable AspectJ auto proxying @EnableAspectJAutoProxy @ComponentScan(basePackages={"program"}) public class Config { //Declare a bean @Bean public MyAspect aspect() { return new MyAspect(); } } 

App.java . It contains the main program:

 import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import program.Calculator; public class App { public static void main(String[] args) throws Exception { ApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class); System.out.println("=======Calling methods========"); Calculator cal = ctx.getBean(Calculator.class); int result = cal.add(10,20); System.out.println(result); } } 

If I run my program, I get this exception:

 Aug 13, 2015 2:44:10 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh INFO: Refreshing org.spring framework.context.annotation.AnnotationConfigApplicationContext@ 17ab5d6d: startup date [Thu Aug 13 14:44:10 IST 2015]; root of context hierarchy Aug 13, 2015 2:44:10 PM org.springframework.context.annotation.AnnotationConfigApplicationContext refresh WARNING: Exception encountered during context initialization - cancelling refresh attempt org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aspect' defined in Config: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [aspect.MyAspect]: Factory method 'aspect' threw exception; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'aspect': Requested bean is currently in creation: Is there an unresolvable circular reference? at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1111) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1006) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84) at App.main(App.java:10) 

According to my program, I have no cyclic dependency, what causes this exception.

Also, if I make small changes to my code, then it works fine. Here are the changes I made to make it work:

1) Comments the bean declaration in Config.java code:

 @Configuration //Enable AspectJ auto proxying @EnableAspectJAutoProxy @ComponentScan(basePackages={"aspects","program"}) public class Config { // bean declaration is removed here and updated basePackages for @ComponentScan } 

Included is the @Component annotation for my class aspect as follows:

 @Aspect @Component public class MyAspect { // same as earlier code. } 
+3
source share
1 answer

I tried to use the same piece of code that was indicated in the post and defined Bean in Config.java and it worked for me. The only error I got with this program is the MyAspect class

'advice should be publicly available

 @Before("anyPublicOperation()") public void beforePointCut(){ System.out.println("Inside before pointcut of MyAspect"); } 

The rest is excellent. You can also try the previous code by updating the context before using

 ApplicationContext context = new AnnotationConfigApplicationContext(); ((AnnotationConfigApplicationContext) context).register(Config.class); ((AbstractApplicationContext) context).refresh(); 
0
source

All Articles