來源: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
*/
@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 注釋的方法必須遵守以下所有標準:
- 該方法不得有任何引數,除非是在 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
*/
@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
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
*/
@Component
public 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;
}
}
呼叫方式
/**
* 方式三
*/
@Test
public 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開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/329991.html
標籤:Java
上一篇:分布式事務(二)之兩階段提交
下一篇:ArrayList和Vector
