SpringBoot作為經典的Java開發框架,其注重的Bean對象佔據了其編程思想的核心部分。對於初學者和開發者而言,正確快速地獲取Bean對象是關鍵步驟之一。本文將從多個方面來詳細介紹SpringBoot獲取Bean對象的方法及注意事項。
一、SpringBoot獲取Bean對象
在SpringBoot中,Bean對象是一個普通的Java對象,通過Bean對象我們可以訪問一個應用程序中的所有對象。Spring Boot將這些Bean對象註冊到ApplicationContext對象中。可以通過以下兩種方法獲取Bean對象:
- 使用註解來自動裝配Bean
- 使用ApplicationContext獲取Bean
下面我們分別介紹這兩種方法:
1.使用註解來自動裝配Bean
使用註解配置Bean對象是SpringBoot開發中非常常見的做法。
// 定義一個Bean對象 @Service public class UserService { public void add(String username, String password) { System.out.println("添加用戶:" + username); } }
使用註解來獲取Bean對象也是非常簡單的,只需要在需要獲取對象的位置使用@Autowired註解即可:
// 獲取UserService Bean @Autowired private UserService userService;
注意事項:
- 使用註解獲取Bean對象必須在SpringBoot啟動類上添加@ComponentScan註解。
- 使用註解獲取Bean對象時,Bean的作用域必須為單例(Singleton),否則會出現Bean創建多份的情況。
2.使用ApplicationContext獲取Bean
使用ApplicationContext也是SpringBoot獲取Bean對象的常用方法之一。ApplicationContext是Spring Framework中的核心接口,其提供了訪問Bean工廠的方法。
首先,我們需要在SpringBoot啟動類中創建一個ApplicationContext對象:
@SpringBootApplication public class Application { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(Application.class, args); } }
在代碼中通過ApplicationContext.getBean方法獲取Bean對象:
ApplicationContext context = SpringApplication.run(Application.class, args); UserService userService= context.getBean(UserService.class);
注意事項:
- 使用ApplicationContext獲取Bean對象必須在SpringBoot啟動類上添加@ComponentScan註解。
- 使用ApplicationContext獲取Bean對象時,Bean的作用域必須為單例(Singleton),否則會出現Bean創建多份的情況。
二、SpringBoot獲取Bean的Method
SpringBoot提供了很多用於獲取Bean對象的方法。下面我們分別介紹常用的幾種方法:
1.使用getBean方法獲取Bean對象
我們可以使用ApplicationContext的getBean方法獲取Bean對象。
ApplicationContext context = SpringApplication.run(Application.class, args); UserService userService = context.getBean(UserService.class);
注意事項:
- 使用getBean方法必須知道需要獲取Bean對象的類型,也就是必須使用Class對象來指定。
- 若容器中存在多個該類型的Bean對象,則需要使用@Bean註解來指定需要獲取的Bean。
2.使用autowireCapableBeanFactory對象獲取Bean對象
我們可以通過autowireCapableBeanFactory對象獲取Bean對象,該對象是ApplicationContext對象的一部分。
ApplicationContext context = SpringApplication.run(Application.class, args); UserService userService = context.getAutowireCapableBeanFactory().createBean(UserService.class);
注意事項:
- 使用autowireCapableBeanFactory對象可以直接通過類對象創建Bean對象,但要注意該對象只能獲取Prototype類型的Bean對象,Singleton類型的Bean對象需要使用其他方法獲取。
三、SpringBoot獲取Bean工具類
SpringBoot為我們提供了很多方便的工具類來獲取Bean對象。下面我們來分別介紹幾個常用的工具類:
1.BeanFactoryUtils
BeanFactoryUtils是獲取Bean的工具類,其提供了多種獲取Bean對象的方法。
// 根據名稱獲取Bean對象 UserService userService = BeanFactoryUtils.beanOfType(context, UserService.class);
注意事項:
- 使用BeanFactoryUtils對象必須知道需要獲取Bean對象的類型,在根據名稱獲取時也需要知道Bean的名稱。
2.ApplicationContextProvider
ApplicationContextProvider是獲取ApplicationContext的工具類,其提供了獲取ApplicationContext對象的方法。
// 獲取ApplicationContext對象 ApplicationContext context = ApplicationContextProvider.getApplicationContext(); UserService userService = context.getBean(UserService.class);
使用ApplicationContextProvider對象獲取ApplicationContext對象時,需要注意其在應用程序啟動時才能獲取到,否則將返回null對象。
四、SpringBoot獲取BeanFactory
在SpringBoot中,我們可以通過ApplicationContext對象獲取BeanFactory對象。BeanFactory是SpringFramework中的核心接口,其管理着Bean對象的生命周期。
ApplicationContext context = SpringApplication.run(Application.class, args); BeanFactory factory = context.getAutowireCapableBeanFactory(); UserService userService = factory.createBean(UserService.class);
注意事項:
- 使用BeanFactory後,需要使用factory.destroyBean方法進行Bean對象的銷毀。
五、SpringBoot獲取位置
在SpringBoot中,我們可以通過ResourceLoader獲取應用程序上下文的位置。
ResourceLoader resourceLoader = new DefaultResourceLoader(); Resource resource = resourceLoader.getResource("classpath:application.properties");
注意事項:
- 使用ResourceLoader時,使用的路徑不同會導致獲取位置的方式也不同。
六、SpringBoot獲取URL
在SpringBoot中,我們可以使用ServletUriComponentsBuilder獲取當前URL對象,並且可以添加參數、路徑等參數。
URI uri = ServletUriComponentsBuilder.fromCurrentRequest().build().toUri();
注意事項:
- 使用ServletUriComponentsBuilder獲取當前URL的方法需要在HTTP請求時使用。
七、SpringBoot獲取被註解的類
使用SpringBoot獲取被註解的類是非常常見的需求,SpringBoot通過ClassPathScanningCandidateComponentProvider提供了獲取指定註解類的方法。
// 獲取被註解的類 ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); scanner.addIncludeFilter(new AnnotationTypeFilter(Service.class)); Set beanDefinitionSet = scanner.findCandidateComponents("com.example.service");
注意事項:
- 使用ClassPathScanningCandidateComponentProvider獲取被註解類時必須知道被註解的類類型。
- 使用時需要按照包名路徑進行填寫,不要填寫完整路徑。
八、SpringBoot獲取本機IP
在SpringBoot中,我們可以使用InetAddress.getLocalHost()獲取本機IP對象。
// 獲取本機IP InetAddress address = InetAddress.getLocalHost();
九、SpringBoot獲取本機IP和端口
在SpringBoot中,我們可以使用ServerProperties來獲取本機的IP地址和端口號。
// 獲取本機IP和端口 @Autowired private ServerProperties serverProperties; public void get() { String ip = serverProperties.getAddress().getHostAddress(); int port = serverProperties.getPort(); }
總結
本文分別從SpringBoot獲取Bean對象、獲取Bean方法、獲取Bean工具類、獲取BeanFactory、獲取位置、獲取URL、獲取被註解的類、獲取本機IP和端口等方面詳細介紹了SpringBoot獲取Bean對象的方法及注意事項。希望本文能為廣大讀者提供實用的技術支持,幫助初學者和開發者更好地理解和使用SpringBoot框架。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/283617.html