文章目錄
- 初識 Spring Bean
-
- 簡介
-
- 1. POJO & Java Bean
-
- i) 什麼是 POJO
- ii) POJO 與 Java Bean 的差別
- 2. Spring Bean
-
- i) 控制反轉 IoC
- ii) 依賴注入 DI
- Spring Bean 的簡單引入
初識 Spring Bean
簡介
1. POJO & Java Bean
i) 什麼是 POJO
POJO(Plain Ordinary Java Object)簡單的Java對象,實際就是普通JavaBeans,是為了避免和EJB混淆所創造的簡稱。
ii) POJO 與 Java Bean 的差別
POJO 和JavaBean是我們常見的兩個關鍵字,一般容易混淆,POJO全稱是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻譯成:普通Java類,具有一部分getter/setter方法的那種類就可以稱作POJO,但是JavaBean則比 POJO複雜很多, Java Bean 是可複用的元件,對 Java Bean 并沒有嚴格的規範,理論上講,任何一個 Java 類都可以是一個 Bean 。但通常情況下,由于 Java Bean 是被容器所建立(如 Tomcat) 的,是以 Java Bean 應具有一個無參的構造器,另外,通常 Java Bean 還要實作 Serializable 接口用于實作 Bean 的持久性。 Java Bean 是不能被跨程序通路的。JavaBean是一種元件技術,就好像你做了一個扳子,而這個扳子會在很多地方被拿去用,這個扳子也提供多種功能(你可以拿這個扳子扳、錘、撬等等),而這個扳子就是一個元件。一般在web應用程式中建立一個資料庫的映射對象時,我們隻能稱它為POJO。POJO(Plain Old Java Object)這個名字用來強調它是一個普通java對象,而不是一個特殊的對象,其主要用來指代那些沒有遵從特定的Java對象模型、約定或架構(如EJB)的Java對象。理想地講,一個POJO是一個不受任何限制的Java對象(除了Java語言規範)。
2. Spring Bean
i) 控制反轉 IoC
控制反轉(Inversion of Control,縮寫為IoC),是面向對象程式設計中的一種設計原則,可以用來減低計算機代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過控制反轉,對象在被建立的時候,由一個調控系統内所有對象的外界實體,将其所依賴的對象的引用傳遞(注入)給它。
技術表現
Class A中用到了Class B的對象b,一般情況下,需要在A的代碼中顯式的new一個B的對象。采用依賴注入技術之後,A的代碼隻需要定義一個私有的B對象,不需要直接new來獲得這個對象,而是通過相關的容器控制程式來将B對象在外部new出來并注入到A類裡的引用中。而具體擷取的方法、對象被擷取時的狀态由配置檔案(如XML)來指定。
ii) 依賴注入 DI
依賴注入有如下實作方式:
- 基于接口。實作特定接口以供外部容器注入所依賴類型的對象。
- 基于 set 方法。實作特定屬性的public set方法,來讓外部容器調用傳入所依賴類型的對象。
- 基于構造函數。實作特定參數的構造函數,在建立對象時傳入所依賴類型的對象。
- 基于注解。基于Java的注解功能,在私有變量前加“@Autowired”等注解,不需要顯式的定義以上三種代碼,便可以讓外部容器傳入對應的對象。該方案相當于定義了public的set方法,但是因為沒有真正的set方法,進而不會為了實作依賴注入導緻暴露了不該暴露的接口(因為set方法隻想讓容器通路來注入而并不希望其他依賴此類的對象通路)。
Spring Bean 的簡單引入
Bean 的建立方式有很多種,首先我們先從 xml 配置檔案引入的方式入手
首先,建立一個 Java 類,這個類可以了解為建立 Bean 的一個模闆。在正式生成 Bean 時,可以往裡面注入不同的值。
在此,我先建立一個 Student 類,該類包含了 id,name, age,sex 等屬性。
Sutdent 類
package cn.deu.just.demo1;
public class Student {
private int id;
private String name;
private int age;
private boolean sex;
public Student(int id, String name, int age, boolean sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ",
age=" + age + ", sex=" + sex + "]";
}
}
在上述代碼中,為其建立了一個帶參的構造函數以便通過 XML 代碼構造一個 Bean,和一個 toString 函數用以傳回 Bean 中的值。
接下來我們需要通過 XML 來對 Bean 進行配置。
XML
<!-- 配置一個 Bean -->
<bean id="student" class="cn.deu.just.demo1.Student">
<constructor-arg name="id" value="19092701"></constructor-arg>
<constructor-arg name="name" value="張三"></constructor-arg>
<constructor-arg name="age" value="22"></constructor-arg>
<constructor-arg name="sex" value="true"></constructor-arg>
</bean>
在上述代碼中:
- id 是 Bean 的 id
- class 是 Bean 使用的類
- constructor-arg 對應帶參構造參數的的參數清單
- constructor-arg 的 name 代表的是參數名
- constructor-arg 的 value 代表的是參數的值
然後我們就需要對 Bean進行測試
為此我們可以建立一個測試類
然後假如測試方法。
@Test
public void Test1() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("BeanDemo1Context.xml");
Student stu = (Student)ctx.getBean("student");
System.out.println(stu);
}
XML 中有着 Bean 的配置資訊,這些資訊連接配接着 Bean 的類,和 Bean 調用。這些包含着的資訊,就可以稱之為上下文。是以要使用 Bean,我們就先要知道 Bean 的上下文資訊包含在哪一個檔案中,然後從改檔案中擷取 Bean 的上下文資訊。再然後就是從上下文中擷取我們需要的 Bean。擷取的 Bean 實際上也是一個類的對象,可直接調用函數。
運作結果
Student [id=19092701, name=張三, age=22, sex=true]