Java SpringBoot

方式一 注解@PostConstruct

  1. import com.example.javautilsproject.service.AutoMethodDemoService;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Component;
  4. import javax.annotation.PostConstruct;
  5. /**
  6. * springboot静态方法获取 bean 的三种方式(一)
  7. */
  8. @Component
  9. public class StaticMethodGetBean_1 {
  10. @Autowired
  11. private AutoMethodDemoService autoMethodDemoService;
  12. @Autowired
  13. private static AutoMethodDemoService staticAutoMethodDemoService;
  14. @PostConstruct
  15. public void init() {
  16. staticAutoMethodDemoService = autoMethodDemoService;
  17. }
  18. public static String getAuthorizer() {
  19. return staticAutoMethodDemoService.test();
  20. }
  21. }

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

  • 该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;
  • 该方法的返回类型必须为 void
  • 该方法不得抛出已检查异常;
  • 应用 PostConstruct 的方法可以是 publicprotectedpackage privateprivate
  • 除了应用程序客户端之外,该方法不能是 static;
  • 该方法可以是 final
  • 如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。

    方式二 启动类ApplicationContext

    实现方式:在SpringBoot的启动类中,定义static变量ApplicationContext,利用容器的getBean方法获得依赖对象 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext;

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

  1. 调用方式
  2. ```java
  3. @RestController
  4. public class TestController {
  5. /**
  6. * 方式二
  7. */
  8. @GetMapping("test2")
  9. public void method_2() {
  10. AutoMethodDemoService methodDemoService = Application.ac.getBean(AutoMethodDemoService.class);
  11. String test2 = methodDemoService.test2();
  12. System.out.println(test2);
  13. }
  14. }

方式三 手动注入ApplicationContext

手动注入ApplicationContext

  1. import org.springframework.beans.BeansException;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.ApplicationContextAware;
  4. import org.springframework.stereotype.Component;
  5. /**
  6. * springboot静态方法获取 bean 的三种方式(三)
  7. */
  8. @Component
  9. public class StaticMethodGetBean_3<T> implements ApplicationContextAware {
  10. private static ApplicationContext applicationContext;
  11. @Override
  12. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  13. StaticMethodGetBean_3.applicationContext = applicationContext;
  14. }
  15. public static <T> T getBean(Class<T> clazz) {
  16. return applicationContext != null?applicationContext.getBean(clazz):null;
  17. }
  18. }

调用方式

  1. /**
  2. * 方式三
  3. */
  4. @Test
  5. public void method_3() {
  6. AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class);
  7. String test3 = autoMethodDemoService.test3();
  8. System.out.println(test3);
  9. }