POJO、Java Bean是如何定義的
在日常開發(fā)中還有一些類經(jīng)常被人叫做POJO,還有的人叫它們Java Bean。這些概念都是在特定場(chǎng)景下引入,用來表明它們的特性的。那這些稱呼都是啥意思,有啥標(biāo)準(zhǔn)和特征呢?今天就來分享一下這些沒用的知識(shí)。
POJO
POJO是 Plain Old Java Object 的簡(jiǎn)寫,大概意思就是“淳樸的Java對(duì)象”。這個(gè)詞是國外一家外包公司的員工創(chuàng)造的。哪些類是POJO類還是有說法的,需要同時(shí)滿足以下幾個(gè)條件:
- 不實(shí)現(xiàn)任何接口的類。
- 不繼承任何其它類的類。
- 不使用任何外部注解的類。
這種類其實(shí)就是切斷了和外界聯(lián)系的Java類,下面這個(gè)類肯定不是:
@Data
public class Dog {
private String name;
private Integer age;
}
這個(gè)才是POJO:
public class Dog {
private String name;
private Integer age;
}
Java Bean
Java Bean也經(jīng)常出現(xiàn)在各種技術(shù)文獻(xiàn)中,也不是隨便什么類都能叫做Java Bean的,它需要有以下定義:
- 有無參數(shù)構(gòu)造。
- 所有的屬性必須是私有屬性(private)。
- 所有的屬性必須有公共的(public?)的Getter和Setter。
- 它必須是可以被序列化的,也就是實(shí)現(xiàn)java.io.Serializable接口。
按照這個(gè)定義,POJO類如果想成為Java Bean,需要改造成下面的形式:
import java.io.Serializable;
/**
* @author felord.cn
*/
public class Dog implements Serializable {
private static final long serialVersionUID = 6723564465081191620L;
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
Spring Bean
既然說到這里了,不妨再說下Spring Bean。Spring Bean的要求就低多了,只要這個(gè)類(接口)被注入了Spring IoC,那么這個(gè)類(接口)都可以被稱作一個(gè)Spring Bean。至于一個(gè)類如何注入Spring IoC,這里就不說了,大家天天都在做。
最后
最后,我們可以得出結(jié)論,一個(gè)POJO總是孤孤單單的,它不可能成為一個(gè)Java Bean或者Spring Bean;但是Java Bean可以同時(shí)是一個(gè)Spring Bean;Spring Bean也可以是一個(gè)Java Bean。