spring容器外部获取容器内部bean

版权声明:本文为IT晓白博主原创文章,转载请附上博文链接! https://blog.csdn.net/qq_38617531/article/details/83627921

思路步骤:      

   1.定义工具类SpringUtil的静态方法和静态引用。

    2.实现接口ApplicationContextAwaresetApplicationContext方法。

    3.spring容器会在创建该对象过程中,将自身引用注入对象中(Component注解,让spring扫描到该bean)

编码步骤

1.编写springutil:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext spring;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(spring == null) {
            spring = applicationContext;
        }

    //获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return spring;
    }

    //通过name获取 Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }

}

2.测试准备

2.1我们在启动的时候先通过代码方式给spring容器中注入一个bean,入下所示

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {
    @Bean(name="testDemo")
    public Demo generateDemo() {
        Demo demo = new Demo();
        demo.setId(123);
        demo.setName("test");
        return demo;
    }
}

2.2实体Demo类

import lombok.Data;

@Data public class Demo {

      private int id;

      private String name;

}

3、测试

然后我们编写测试controller,并从刚才写的springutil中获取这个bean

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/application")
public class TestApplicationController {
    
    @RequestMapping("/test")
    public Object testSpringUtil() {
        return SpringUtil.getBean("testDemo");
    }
    
}

猜你喜欢

转载自blog.csdn.net/qq_38617531/article/details/83627921