您好,登錄后才能下訂單哦!
本篇內容介紹了“Spring Boot中單例類實現(xiàn)對象的注入方式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
項目用的是SpringBoot,但其中有個類用的是單例,為了不改變單例,且還需要引入Spring管理的Bean對象
啟動時會報空指針異常,因為static類對象是創(chuàng)建對象后,內存中還沒有注入Bean信息,且無法初始化Bean實例,這里的解決辦法是利用@PostConstruct來對單例類中對象的注入
@Component public class MesssageHandle implements IMessageHandler { private final static Logger logger = LoggerFactory.getLogger(MesssageHandle.class); private static MesssageHandle instance = new MesssageHandle(); @Autowired private ScheduleService scheduleService; private MesssageHandle(){ } public static MesssageHandle getInstance() { return instance; } @PostConstruct public void init(){ instance = this; instance.scheduleService = this.scheduleService; }
現(xiàn)在我們的項目中需要引入一個java類庫,我想要很方便的使用該類庫中的一個類,并且我想要創(chuàng)建這個類的一個單例對象。然后可以很方便的在各個模塊中用@AutoWired進行對象注入。
比如一個配置文件,我在一個地方創(chuàng)建Configuration對象,讀取配置文件中的配置,然后在各個模塊中使用該對象。
這個需求涉及到兩個問題
一個是單例對象的創(chuàng)建;另外一個是單例對象的引用。因為,你要用一個對象,你首先得創(chuàng)建它。創(chuàng)建一個對象在Spring中有固定的模式,在定義類的時候使用@Component注解,@Component默認是單例的。這樣spring framework在進行component scan的時候就會創(chuàng)建這個對象。用的時候很簡單,只需要@Autowired就可以了。
@Autowired最好使用構造器注入,也就是說,不是直接將@Autowired放在成員變量上面,而是放在構建函數(shù)上面,然后通過構造函數(shù)的參數(shù)注入。為何要這么麻煩?
所以這整個的過程也是Spring boot所具備的能力。
現(xiàn)在如果用這種對象注入來使用成熟的包中的對象呢?
4.1 使用配置文件生成bean
<bean class="xxx"></bean>
4.2 使用@Configuration注解生成bean
@Configuration public class AppConfig { @Bean(name = "timedCache") public TimedCache<String, Muser> listStrBean() { return new TimedCache<String, Muser>(30 * 6000); } }
5.1 dao
@Repository
5.2 model
不需要注解
5.3 restful的controller
@RestController
5.4 service
service接口處不用,在接口的實現(xiàn)類處用@Service
要用到另外一個類的對象時,首先定義一個引用。
然后在本類的構造函數(shù)中給該引用賦值,然后將@Autowired來注解這個構造函數(shù)。
“Spring Boot中單例類實現(xiàn)對象的注入方式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。