天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

SpringBoot 静态获取 bean 的三种方式,你学会了吗?

itzoo 731次浏览 0个评论

点击“终码一生”,关注,置顶公众号

每日技术干货,第一时间送达!



注意:调用者要被spring管理



1

目录


  • 方式一  注解@PostConstruct

  • 方式二  启动类ApplicationContext

  • 方式三  手动注入ApplicationContext


方式一  注解@PostConstruct

 

/**
 * springboot静态方法获取 bean 的三种方式(一)
 * @author: clx
 * @version: 1.1.0
 */

@Component
public class StaticMethodGetBean_1 {

    @Autowired
    private AutoMethodDemoService autoMethodDemoService;

    @Autowired
    private static AutoMethodDemoService staticAutoMethodDemoService;

    @PostConstruct
    public void init() {
        staticAutoMethodDemoService = autoMethodDemoService;
    }

    public static String getAuthorizer() {
        return staticAutoMethodDemoService.test();
    }
}


注解@PostConstruct说明


PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。


应用 PostConstruct 注释的方法必须遵守以下所有标准:


  • 该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;

  • 该方法的返回类型必须为 void;

  • 该方法不得抛出已检查异常;

  • 应用 PostConstruct 的方法可以是 public、protected、package private 或 private;

  • 除了应用程序客户端之外,该方法不能是 static;

  • 该方法可以是 final;

  • 如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。


方式二  启动类ApplicationContext


实现方式:在springboot的启动类中,定义static变量ApplicationContext,利用容器的getBean方法获得依赖对象

/**
 * @author: clx
 * @version: 1.1.0
 */

@SpringBootApplication
public class Application {
    public static ConfigurableApplicationContext ac;
    public static void main(String[] args) {
       ac = SpringApplication.run(Application.class, args);
    }
}


调用方式


/**
 * @author: clx
 * @version: 1.1.0
 */

@RestController
public class TestController {

    /**
     * 方式二
     */

    @GetMapping("test2")
    public void method_2() {
        AutoMethodDemoService methodDemoService = Application.ac.getBean(AutoMethodDemoService.class);
        String test2 = methodDemoService.test2();
        System.out.println(test2);
    }
}


方式三  手动注入ApplicationContext


手动注入ApplicationContext

 

/**
 * springboot静态方法获取 bean 的三种方式(三)
 * @author: clx
 * @version: 1.1.0
 */

@Component
public class StaticMethodGetBean_3<Timplements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        StaticMethodGetBean_3.applicationContext = applicationContext;
    }

    public static <T> getBean(Class<T> clazz) {
        return applicationContext != null?applicationContext.getBean(clazz):null;
    }
}


调用方式


/**
 * 方式三
 */

@Test
public void method_3() 
{
    AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class);
    String test3 = autoMethodDemoService.test3();
    System.out.println(test3);
}


以上三种方式楼主都测试过可以为完美使用。


来源:blog.csdn.net/showchi/article/details/97005720


PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。


往期推荐



新版 IntelliJ IDEA2021.3 即将来袭,这次又出了哪些神仙功能!

为什么国内 996 干不过国外的 955呢?

每日开源 | 告别造轮子,试试这个单点登录框架…

字节二面:说说 SpringMVC 工作原理!!

真的坑,这个 MySQL 的 bug 99% 的人会踩!

这几款国产开源项目!是真滴牛逼…



ITZOO版权所有丨如未注明 , 均为原创丨转载请注明来自IT乐园 ->SpringBoot 静态获取 bean 的三种方式,你学会了吗?
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址