起源:blog.csdn.net/showchi/article/details/97005720
留神:调用者要被spring治理
形式一
注解@PostConstruct
import com.example.javautilsproject.service.AutoMethodDemoService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * springboot静态方法获取 bean 的三种形式(一) * @author: clx * @version: 1.1.0 */@Componentpublic 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 正文的办法必须恪守以下所有规范:
- 该办法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的状况下,依据 EJB 标准的定义,在这种状况下它将带有一个 InvocationContext 对象 ;
- 该办法的返回类型必须为 void;
- 该办法不得抛出已查看异样;
- 利用 PostConstruct 的办法能够是 public、protected、package private 或 private;
- 除了应用程序客户端之外,该办法不能是 static;
- 该办法能够是 final;
- 如果该办法抛出未查看异样,那么不得将类放入服务中,除非是可能解决异样并可从中复原的 EJB。
形式二
启动类ApplicationContext
实现形式:在springboot的启动类中,定义static变量ApplicationContext,利用容器的getBean办法取得依赖对象
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;/** * @author: clx * @version: 1.1.0 */@SpringBootApplicationpublic class Application { public static ConfigurableApplicationContext ac; public static void main(String[] args) { ac = SpringApplication.run(Application.class, args); } }
调用形式
/** * @author: clx * @version: 1.1.0 */@RestControllerpublic class TestController { /** * 形式二 */ @GetMapping("test2") public void method_2() { AutoMethodDemoService methodDemoService = Application.ac.getBean(AutoMethodDemoService.class); String test2 = methodDemoService.test2(); System.out.println(test2); }}
形式三
手动注入ApplicationContext
import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component; /** * springboot静态方法获取 bean 的三种形式(三) * @author: clx * @version: 1.1.0 */@Componentpublic class StaticMethodGetBean_3<T> implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { StaticMethodGetBean_3.applicationContext = applicationContext; } public static <T> T getBean(Class<T> clazz) { return applicationContext != null?applicationContext.getBean(clazz):null; }}
调用形式
/** * 形式三 */@Testpublic void method_3() { AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class); String test3 = autoMethodDemoService.test3(); System.out.println(test3);}
以上三种形式楼主都测试过能够为完满应用。
近期热文举荐:
1.1,000+ 道 Java面试题及答案整顿(2021最新版)
2.别在再满屏的 if/ else 了,试试策略模式,真香!!
3.卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.5 重磅公布,光明模式太炸了!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!