使用java類配置bean(如何配置JAVA)

本文目錄一覽:

如何java類配置中獲取bean

Spring 文件中將bean注入到想要獲得該bean的類中。 或者: ApplicationContext app=WebApplicationContextUtils.getWebApplicationContext(event .getServletContext()); 其中event 是ServletContextEvent 可以在listener中找到

java怎麼配置spring的bean

眾所周知,Spring 框架是控制反轉 (IOC) 或依賴性注入 (DI) 模式的推動因素,而這種推動是通過基於容器的配置實現的。過去,Spring 允許開發人員使用基於 XML 的配置,通過利用應用程序上下文 XML 文件來管理 bean 依賴性。此文件處於應用程序的外部,包含 bean 及其與該應用程序的依賴項的定義。儘管使用 XML 配置較為簡單和便捷,但仍有另外一種方法可定義 bean 及其依賴項。這種方法也稱為基於 Java 的配置。不同於 XML,基於 Java 的配置使您能夠以編程方式管理 bean。這可通過運用多種注釋來實現。 這篇文章將演示 Java 配置示例,並將其與傳統 XML 配置方法相對比。本文將按照如下步驟演示基於 Java 的配置的基本用法:

理解 @Configuration 和 @Bean 注釋

使用 AnnotationConfigApplicationContext 註冊配置類

配置 Web 應用程序

實現 bean 生命周期回調和範圍

我們將使用一所在線大學的 “創建課程” 用例。在創建課程的過程中,還會創建主題或者模塊,而各主題可能又有着不同的作業。因此,我們要創建三個 bean,分別為 Course、Module 和 Assignment。Course bean 將包含一個對 Module bean 的引用,後者包含對 Assignment bean 的引用。

理解 @Configuration 和 @Bean 注釋

在理想的場景中,您可以在表示應用程序上下文的 XML 中定義 bean。以下代碼展示了創建課程 用例中的上下文 XML 及 bean 定義:

清單 1. XML 與 bean 定義

beans

bean id=”course” class=”demo.Course”

property name=”module” ref=”module”/

/bean

bean id=”module” class=”demo.Module”

property name=”assignment” ref=”assignment”/

/bean

bean id=”assignment” class=”demo.Assignment” /

/beans

以上 XML 就是您在使用 Spring 配置 bean 時通常會編寫的代碼。這段 XML 代碼定義了 Course bean,它引用 Module bean。Module bean 有一個 Assignment bean 的引用。您現在要刪除這段 XML,編寫同等效果的 Java 代碼。您將使用基於 Java 的配置定義上面指定的 bean。我們會將 XML 替換為 Java 類,這個 Java 類現在將用作 bean 配置的平台。我們將這個類命名為 AppContext.java。以下代碼展示了 AppContext類。

清單 2. 包含 bean 定義的 AppContext 配置類

@Configuration

public class AppContext {

@Bean

public Course course() {

Course course = new Course();

course.setModule(module());

return course;

}

@Bean

public Module module() {

Module module = new Module();

module.setAssignment(assignment());

return module;

}

@Bean

public Assignment assignment() {

return new Assignment();

}

}

正如您通過以上代碼所看到的那樣,現在可以以編程的方式將 bean 定義為基於 Java 的配置的一部分。AppContext 類現在就像 XML 一樣表示配置類。這是通過利用 @Configuration 注釋實現的。@Configuration 注釋位於類的頂端。它告知 Spring 容器這個類是一個擁有 bean 定義和依賴項的配置類。@Bean 注釋用於定義 bean。上述注釋位於實例化 bean 並設置依賴項的方法上方。方法名稱與 bean id 或默認名稱相同。該方法的返回類型是向 Spring 應用程序上下文註冊的 bean。您可使用 bean 的 setter 方法來設置依賴項,容器將調用它們來連接相關項。基於 Java 的配置也被視為基於注釋的配置。

使用 AnnotationConfigApplicationContext 註冊配置類

在傳統 XML 方法中,您可使用 ClassPathXmlApplicationContext 類來加載外部 XML 上下文文件。但在使用基於 Java 的配置時,有一個AnnotationConfigApplicationContext 類。AnnotationConfigApplicationContext 類是 ApplicationContext 接口的一個實現,使您能夠註冊所注釋的配置類。此處的配置類是使用 @Configuration 注釋聲明的 AppContext。在註冊了所述類之後,@Bean 注釋的方法返回的所有 bean 類型也會得到註冊。以下代碼演示了 AnnotationConfigApplicationContext 類的使用:

清單 3. 使用 AnnotationConfigApplicationContext 註冊 AppContext 類

public static void main(String[] args) {

ApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class);

Course course = ctx.getBean(Course.class);

course.getName();

}

正如以上代碼所示,AppContext 配置類的註冊方式是將其傳遞給 AnnotationConfigApplicationContext 構造函數。此外,您還可以使用所述上下文類的 register 方法來註冊配置類。以下代碼展示了另外一種方法。

清單 4. 註冊 AppContext 類:另外一種方法

public static void main(String[] args) {

ApplicationContext ctx = new AnnotationConfigApplicationContext();

ctx.register(AppContext.class)

}

註冊配置類將自動註冊 @Bean 注釋的方法名稱,因而其對應的 bean 就是 Course、Module 和 Assignment。隨後您可以使用 getBean 方法來獲取相關的 bean,並調用其業務方法。如您所見,編寫 Java 的配置類並將其註冊到 Spring 上下文非常簡單。下一節將討論如何將基於 Java 的配置與 Web 應用程序配合使用。

配置 Web 應用程序

過去,您通常要利用 XmlWebApplicationContext 上下文來配置 Spring Web 應用程序,即在 Web 部署描述符文件 web.xml 中指定外部 XML 上下文文件的路徑。XMLWebApplicationContext 是 Web 應用程序使用的默認上下文類。以下代碼描述了 web.xml 中指向將由ContextLoaderListener 監聽器類載入的外部 XML 上下文文件的元素。

清單 5. 使用外部 XML 上下文文件的 web.xml

web-app

context-param

param-namecontextConfigLocation/param-name

param-value/WEB-INF/applicationContext.xml/param-value

/context-param

listener

listener-class

org.springframework.web.context.ContextLoaderListener

/listener-class

/listener

servlet

servlet-namesampleServlet/servlet-name

servlet-class

org.springframework.web.servlet.DispatcherServlet

/servlet-class

/servlet

/web-app

現在,您要將 web.xml 中的上述代碼更改為使用 AnnotationConfigApplicationContext 類。切記,XmlWebApplicationContext 是 Spring 為 Web 應用程序使用的默認上下文實現,因此您永遠不必在您的 web.xml 文件中顯式指定這個上下文類。現在,您將使用基於 Java 的配置,因此在配置 Web 應用程序時,需要在 web.xml 文件中指定 AnnotationConfigApplicationContext 類。上述代碼將修改如下:

清單 6. 修改後的使用 AnnotationConfigApplicationContext 的 web.xml

web-app

context-param

param-namecontextClass/param-name

param-value

org.springframework.web.context.

support.AnnotationConfigWebApplicationContext

/param-value

/context-param

context-param

param-namecontextConfigLocation/param-name

param-value

demo.AppContext

/param-value

/context-param

listener

listener-class

org.springframework.web.context.ContextLoaderListener

/listener-class

/listener

servlet

servlet-namesampleServlet/servlet-name

servlet-class

org.springframework.web.servlet.DispatcherServlet

/servlet-class

init-param

param-namecontextClass/param-name

param-value

org.springframework.web.context.

support.AnnotationConfigWebApplicationContext

/param-value

/init-param

/servlet

/web-app

以上修改後的 web.xml 現在定義了 AnnotationConfigWebApplicationContext 上下文類,並將其作為上下文參數和 servlet 元素的一部分。上下文配置位置現在指向 AppContext 配置類。這非常簡單。下一節將演示 bean 的生命周期回調和範圍的實現。

實現 bean 生命周期回調和範圍

生命周期回調

您還可以使用基於 Java 的配置來管理 bean 的生命周期。@Bean 支持兩種屬性,即 initMethod 和 destroyMethod,這些屬性可用於定義生命周期方法。在實例化 bean 或即將銷毀它時,容器便可調用生命周期方法。生命周期方法也稱為回調方法,因為它將由容器調用。使用 @Bean注釋註冊的 bean 也支持 JSR-250 規定的標準 @PostConstruct 和 @PreDestroy 注釋。如果您正在使用 XML 方法來定義 bean,那麼就應該使用 bean 元素來定義生命周期回調方法。以下代碼顯示了在 XML 配置中通常使用 bean 元素定義回調的方法。

清單 7. 使用 XML 方法實現生命周期回調

bean id=”course” class=”demo.Course” init-method=”setup” destroy-method=”cleanup”

property name=”module” ref=”module”/

/bean

以下代碼演示了使用 Java 配置的生命周期方法

清單 8. 使用 AppContext 配置類實現 bean 生命周期方法

@Configuration

public class AppContext {

@Bean(initMethod = “setup”, destroyMethod = “cleanup”)

public Course course() {

Course course = new Course();

course.setModule(module());

return course;

}

@Bean(initMethod = “setup”, destroyMethod = “cleanup”)

public Module module() {

Module module = new Module();

module.setAssignment(assignment());

return module;

}

}

public class Course {

private Module module;

private String name;

public Course() {

}

public void setup() {

this.name = “M100 Pythagoras Theorems”

}

public void setModule(Module module) {

this.module = module;

}

public void cleanup() {

module = null;

}

}

上面的代碼重新訪問了 AppContext 配置類。@Bean 注釋現在有兩個額外的屬性,即 initMethod 和 destroyMethod。它們定義了生命周期方法的設置和清除。這些方法是在已經註冊的 bean 中實現的,最終由容器在 bean 初始化及其銷毀之前調用它。這裡以 Course bean 為例,提供了生命周期方法實現。所實現的方法是 setup 和 cleanup。同樣,您還可以在 Module 和 Assignment bean 中實現這些方法。

Bean 範圍

bean 的方法是使用 @Scope 注釋定義的。XML 中實現這一目標的方法是指定 bean 元素中的 scope 屬性。

清單 9. 使用 XML 方法定義 bean 範圍

bean id=”course” class=”demo.Course” scope=”prototype”

property name=”module” ref=”module”/

/bean

以下代碼展示了使用 Java 配置的 bean 範圍定義:

清單 10. 使用 AppContext 配置類定義 bean 範圍

@Configuration

public class AppContext {

@Bean(initMethod = “setup”, destroyMethod = “cleanup”)

@Scope(“prototype”)

public Course course() {

Course course = new Course();

course.setModule(module());

return course;

}

}

正如您在上面的代碼中所看到的那樣,在 Java 配置類中定義 bean 的範圍非常簡單。上面的 AppContext 配置類使用 @Scope 注釋為 Coursebean 定義了一個 prototype 範圍。默認範圍是 singleton。

利用 Java 配置可以做許多事情。本文只觸及了一些基礎內容。使用 Java 配置並無顯著優勢,它僅僅是 Spring 提供的 XML 配置的替代方法。對於不喜歡在框架中使用 XML 的人來說,這是實現配置的一種出色方法。但缺點也是顯而易見的,如果您對 Java 類中的配置做出了任何更改,就必須重新編譯應用程序。

JAVA中Bean是什麼意思?書寫規範是什麼?

javaBean在MVC設計模型中是model,又稱模型層,在一般的程序中,我們稱它為數據層,就是用來設置數據的屬性和一些行為,然後我會提供獲取屬性和設置屬性的get/set方法JavaBean是一種JAVA語言寫成的可重用組件。為寫成JavaBean,類必須是具體的和公共的,並且具有無參數的構造器。JavaBean通過提供符合一致性設計模式的公共方法將內部域暴露成員屬性。眾所周知,屬性名稱符合這種模式,其他Java類可以通過自身機制發現和操作這些JavaBean屬性。用戶可以使用JavaBean將功能、處理、值、數據庫訪問和其他任何可以用java代碼創造的對象進行打包,並且其他的開發者可以通過內部的JSP頁面、Servlet、其他JavaBean、applet程序或者應用來使用這些對象。用戶可以認為JavaBean提供了一種隨時隨地的複製和粘貼的功能,而不用關心任何改變。JavaBean書寫規範:(1)JavaBean類必須是一個公共類,並將其訪問屬性設置為public,如:publicclassuser{?}(2)JavaBean類必須有一個空的構造函數:類中必須有一個不帶參數的公用構造器,例如:publicUser(){?}(3)一個javaBean類不應有公共實例變量,類變量都為private,如:privateintid;(4)javaBean屬性是具有getter/setter方法的成員變量。也可以只提供getter方法,這樣的屬性叫只讀屬性;也可以只提供setter方法,這樣的屬性叫只寫屬性;如果屬性類型為boolean類型,那麼讀方法的格式可以是get或is。例如名為abc的boolean類型的屬性,它的讀方法可以是getAbc(),也可以是isAbc();一般JavaBean屬性以小寫字母開頭,駝峰命名格式,相應的getter/setter方法是get/set接上首字母大寫的屬性名。例如:屬性名為userName,其對應的getter/setter方法是getUserName/setUserName。但是,還有一下幾種特殊情況:1、如果屬性名的第二個字母大寫,那麼該屬性名直接用作getter/setter方法中get/set的後部分,就是說大小寫不變。例如屬性名為uName,方法是getuName/setuName。2、如果前兩個字母是大寫(一般的專有名詞和縮略詞都會大寫),也是屬性名直接用作getter/setter方法中get/set的後部分。例如屬性名為URL,方法是getURL/setURL。3、如果首字母大寫,也是屬性名直接用作getter/setter方法中get/set的後部分。例如屬性名為Name,方法是getName/setName,這種是最糟糕的情況,會找不到屬性出錯,因為默認的屬性名是name。所以在JavaBean命名時應該注意符合以上命名規範。綜上述文章,為大家講解了Java中的bean用法的介紹,以及書寫規範。

原創文章,作者:QBWF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/134454.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QBWF的頭像QBWF
上一篇 2024-10-04 00:06
下一篇 2024-10-04 00:06

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論