第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 CDI 使單例實例隨處可見?

如何使用 CDI 使單例實例隨處可見?

暮色呼如 2023-03-23 15:40:48
我有一個應用程序。每個用戶對應實體“Client”。在會話期間,用戶使用他的實體。我有 JAX-RS + EJB 應用程序。我希望這個實體在所有服務中都可見并作為一個單例使用。我想用 CDI 來實現(xiàn)它。首先,用戶登錄到應用程序。登錄后,我想從base中獲取它的entity,并賦值給一個singleton,但是沒有成功。我嘗試了@Singleton注釋 ( javax.inject)@SessionScoped和@ApplicationScoped.我該怎么做?//Entity@Entity@SessionScope //or @Singlton/@ApplicationScopeclass Client { fields }//login service@Inject Client client;//After login I want to assign an entity from db[cleintEntity] //to entity which is available everywhere[client]client = clientEntity;我想做這個://some ejb@InjectClient client;//use entity我不想在整個應用程序中傳輸指向實例的鏈接,但我希望使用 CDI 在任何地方都可以使用它?;蛘呶沂欠裥枰獎?chuàng)建一個單獨的ClientDAO,這將是我的單身人士?
查看完整描述

1 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

根據(jù)您的評論,您必須使用@SessionScope. 如果您希望所有用戶都擁有一個實例,則可以使用@Singletonand 。@ApplicationScope

解決您的問題:

  1. 你想Client在用戶登錄時實例化。所以當你在登錄服務中時,這個對象還沒有實例化,所以你不能把@Inject它放到你的登錄服務中,你應該記得刪除注釋@Inject。

  2. 您需要使用@Produces注釋。當你想控制你的類被實例化的方式時,使用這個注解。當 CDI 容器要查找該類的實現(xiàn)時Client,如果它找到一個返回Client并具有@Produces注釋的方法,它會調用該方法,而不是僅僅實例化自身Client。你應該做你的登錄業(yè)務,然后創(chuàng)建一個實例Client并將其作為成員變量存儲在你的登錄服務中。然后在此類中添加一個返回該客戶端對象的方法,并用 注釋該方法@Produces。您的登錄服務的最終結構如下所示:

   @SessionScope

    public class LoginService {

        private Client client;


        public void login(String username, String password) {

            //  implement login business


            //  if login is successful

            client = clientEntity;

        }


        @Produces

        @SessionScope

        public Client clientProducer() {

            return this.client;

        }

    }

您還可以將@Produces注釋放在字段之上。在這種情況下,CDI 容器將使用存儲在該字段上的值而不是調用方法。


    @SessionScope

    public class LoginService {

        @Produces

        @SessionScope

        private Client client;


        public void login(String username, String password) {

            //  implement login business


            //  if login is successful

            client = clientEntity;

        }

    }

當然,這應該被視為一種偽代碼。我不知道你們公司的所有細節(jié)。也許您實現(xiàn)邏輯的方式是完全錯誤的;)。但要解決這個具體問題,@Produces應該可行。


查看完整回答
反對 回復 2023-03-23
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號