How to access a method a Spring Bean from a class not in the Spring Container

后端 未结 3 1164
遇见更好的自我
遇见更好的自我 2021-02-15 15:00

I\'m not a Spring pro, so please bear with me....

I have three classes:

class SpringBeanA {
    public aMethod() {
        .....
    }
}

class SpringBea         


        
3条回答
  •  隐瞒了意图╮
    2021-02-15 15:32

    Spring initializes all the objects and keep it in Spring Application Context. You have couple different ways to get access to objects inside Application context

    First create a spring configuration class to inject ApplicationContext in to a private attribute and expose as static method.

    @Configuration
    class StaticApplicationContext implements ApplicationContextAware{
    
      static ApplicationContext applicationContext = null;
    
      public void setApplicationContext(ApplicationContext context)    throws BeansException {
        applicationContext = context;
      }
      /**
       * Note that this is a static method which expose ApplicationContext
       **/
      public static ApplicationContext getContext(){
            return applicationContext;
      }
    
    }
    

    Now you can try this in your non spring class,

    ((SpringBeanB)StaticApplicationContext.getContext.getBean("b")).bMethod();
    

    Please keep in mind, invoking getContext method before spring context initialization may cause NullPointerException. Also accessing beans outside of spring container is not a recommended approach. Ideal way will be to move all beans in to spring container to manage.

    If you want to access SpringApplicationContext from a java Servelet please refer WebApplicationContextUtils

提交回复
热议问题