**JavaBeans**՝ դասեր Java լեզվով, որոնք գրված են որոշակի կանոնների համաձայն։ Դրանք օգտագործվում են մի քանի առարկաներ մեկում միավորելու համար (անգլ.՝ bean - հատիկներ, սուրճի հատիկներ) օբյեկտների հարմար փոխանցման համար։

Sun Microsystems-ի հստակեցումը սահմանում է JavaBeans-ը որպես բազմակի օգտագործման ծրագրային բաղադրիչներ, որոնք կարող են շահագործվել գրաֆիկական դիզայներների և IDE գործիքների միջոցով։

JavaBeans-ը հիմք է տալիս բազմակի օգտագործման, ներկառուցվող և մոդուլային ծրագրային բաղադրիչների համար։ JavaBeans-ը գալիս է բազմաթիվ ձևերով, բայց դրանք առավել հաճախ օգտագործվում են GUI տարրերում։ JavaBeans-ի ստեղծման նպատակներից մեկը նմանատիպ բաղադրիչ կառուցվածքների հետ փոխգործակցությունն է։ Օրինակ, Windows ծրագիրը, հաշվի առնելով համապատասխան կամուրջը կամ դեկորատոր օբյեկտը, կարող է օգտագործել JavaBeans բաղադրիչը, կարծես դա COM կամ ActiveX բաղադրիչ է։

JavaBean նկարագրության կանոններ
-------------------------------

Որպեսզի դասը աշխատի որպես bean, այն պետք է հետևի որոշակի մեթոդի անվանման, կոնստրուկտորի և վարքագծի կանոններին։ Այս կոնվենցիաները հնարավորություն են տալիս ստեղծել գործիքներ, որոնք կարող են օգտագործել, փոխարինել և կապել JavaBeans-ը։

Նկարագրության կանոններն են.

* Դասը պետք է ունենա անպարամետր կոնստրուկտոր՝ `public` հասանելիության փոփոխիչով։ Նման կոնստրուկտորը գործիքներին հնարավորություն է տալիս ստեղծել օբյեկտ՝ առանց պարամետրերի լրացուցիչ բարդության։
* Դասի հատկությունները պետք է հասանելի լինեն get, set և այլ մեթոդների միջոցով (կոչվում են աքսեսուարներ), որոնք պետք է հետևեն անվանման ստանդարտ կոնվենցիային։ Սա հեշտությամբ թույլ է տալիս գործիքներին ավտոմատ կերպով հայտնաբերել և թարմացնել bean բովանդակությունը։ Շատ գործիքներ նույնիսկ ունեն մասնագիտացված խմբագիրներ տարբեր տեսակի հատկությունների համար։
* Դասը պետք է սերիականացվի։ Սա հնարավորություն է տալիս հուսալիորեն պահպանել, պահել և վերականգնել bean վիճակը հարթակից և վիրտուալ մեքենայից անկախ եղանակով։
* Դասը պետք է ունենա հավասար(), hashCode() և toString() մեթոդները։

Քանի որ պահանջները հիմնականում գրված են որպես կոնվենցիա, այլ ոչ թե միջերես, որոշ մշակողներ JavaBeans-ը համարում են պարզ հին Java օբյեկտներ, որոնք հետևում են անվանման որոշակի կոնվենցիաներին։

Օրինակներ
---------

```
// PersonBean.java

public class PersonBean implements java.io.Serializable {
 private String name;
 private boolean deceased;

 public PersonBean() {
 }

 // Методы геттеры (get) и сеттеры (set)
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public boolean getDeceased() {
 return deceased;
 }
 public void setDeceased(boolean deceased) {
 this.deceased = deceased;
 }

 //Переопределенные методы equals() и hashCode()
 @Override
 public boolean equals(Object o) {
 if (this == o) {
 return true;
 }
 if (o == null || getClass() != o.getClass()) {
 return false;
 }

 PersonBean that = (PersonBean) o;

 if (deceased != that.deceased) {
 return false;
 }
 return !(name != null ? !name.equals(that.name) : that.name != null);

 }

 @Override
 public int hashCode() {
 int result = name != null ? name.hashCode() : 0;
 result = 31 \* result + (deceased ? 1 : 0);
 return result;
 }

 //Переопределенный метод toString()
 @Override
 public String toString() {
 return "PersonBean{" +
 "name='" + name + '\'' +
 ", deceased=" + deceased +
 '}';
 }
}

```

```
// TestPersonBean.java

public class TestPersonBean {
 public static void main(String[] args) {

 PersonBean person = new PersonBean();
 person.setName("Bob");
 person.setDeceased(true);

 // Результат: "Bob [deceased]"
 System.out.print(person.getName());
 System.out.println(person.getDeceased() ? "[deceased]" : "[alive]");
 }
}

```

Ծանոթագրություններ
------------------

1. ↑  "Спецификация JavaBeans". *www.oracle.com* (in ամերիկյան անգլերեն). Արխիվացված from the original on 2021 թ․ ապրիլի 16. Retrieved 2021 թ․ մարտի 31.