如何在Spring容器中手动添加bean并对其应用建议而不从容器中获取bean?

时间:2014-05-14 00:38:18

标签: java spring playframework playframework-2.2 spring-aop

我试图在Play Framework中对Global.java提出建议。

我无法从spring容器中获取bean的原因是因为这个Global.java正在由Play Framework引导,我无法手动替换它的实例。

我能想到的两种可能的解决方案:

  1. 找到一种类似于autowireBean(..)的方法,不仅可以设置。{ autowirings也提供建议。
  2. 找到替换的方法 Play框架用于引导应用程序的全局实例。
  3. 这是我的代码段:

    @Component( "global" )
    public class Global {
    
        private ApplicationContext ctx;
    
        @Override
    public void onStart(Application app) {
            this.ctx = new ClassPathXmlApplicationContext( "spring-config.xml" );
            this.ctx.getAutowireCapableBeanFactory().autowireBean( this );
        }
    
    
        @Override
    public Action<?> onRequest(Request req, Method actionMethod) 
           return ....
        }
    }
    
    
    @Aspect
    public class AspectDemo {
    
        @Around( "execution(* Global.onRequest(..))" )
        public Object myAround(ProceedingJoinPoint jp) throws Throwable
        {
            System.out.println( "advising around start");
            Object obj = jp.proceed();
                // do something about the obj...
            System.out.println( "advising around end");
            return obj;
        }
    }
    

1 个答案:

答案 0 :(得分:0)

为了使Global成为一个Spring bean(这意味着你可以使用Spring AOP),请查看@Configurable注释。基本上使用该注释和一些额外的配置,Spring可以使任何类没有实例化托管bean。

查看thisthis了解详情。