本文目錄一覽:
如何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-tw/n/134454.html