הערות Spring @Bean

ספרינג @Bean הוא אננוטציה המיועדת לשימוש על ידי שיטה כדי לציין כי היא מחזירה גוש (bean) שיהיה ניהולי על ידי ההקשר של ספרינג. נהוג להכריז על האננוטציה של Bean בשיטות של מחלקות ההגדרה (Configuration). במקרה זה, ייתכן שבשיטות ה-Bean יתייחסו לשיטות אחרות עם אננוטציה @Bean באותה מחלקה, על ידי קריאה ישירה אליהן.

דוגמה ל- Spring @Bean

נניח כי יש לנו מחלקה פשוטה כמו שמוצג למטה.

package com.journaldev.spring;

public class MyDAOBean {

	@Override
	public String toString() {
		return "MyDAOBean"+this.hashCode();
	}
}

זו היא מחלקת ההגדרה (Configuration) בה הוגדרה שיטת @Bean עבור מחלקת MyDAOBean.

package com.journaldev.spring;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyAppConfiguration {

	@Bean
	public MyDAOBean getMyDAOBean() {
		return new MyDAOBean();
	}
}

ניתן לקבל את ה-Bean של MyDAOBean מההקשר של ספרינג באמצעות קטע הקוד הבא.

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
		
// קבלת Bean לפי סוג המחלקה
MyDAOBean myDAOBean = context.getBean(MyDAOBean.class);

שם Bean של ספרינג

ניתן לציין את שם ה-@Bean ולהשתמש בו כדי לקבל אותם מההקשר של ספרינג. נניח כי יש לנו מחלקת MyFileSystemBean הוגדרת כמצוין:

package com.journaldev.spring;

public class MyFileSystemBean {

	@Override
	public String toString() {
		return "MyFileSystemBean"+this.hashCode();
	}
	
	public void init() {
		System.out.println("init method called");
	}
	
	public void destroy() {
		System.out.println("destroy method called");
	}
}

כעת נגדיר שיטת @Bean במחלקת ההגדרה:

@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"})
public MyFileSystemBean getMyFileSystemBean() {
	return new MyFileSystemBean();
}

ניתן לקבל את הגוש מהקונטקסט באמצעות שימוש בשם הגוש.

MyFileSystemBean myFileSystemBean = (MyFileSystemBean) context.getBean("getMyFileSystemBean");

MyFileSystemBean myFileSystemBean1 = (MyFileSystemBean) context.getBean("MyFileSystemBean");

spring @bean בשיטות initmethod ו־destroymethod

אפשר גם לציין שיטת init ו־destroy של הגוש של spring. שיטות אלו יתקראו כאשר הגוש של spring נוצר וכאשר הקונטקסט נסגר בהתאמה.

@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"}, initMethod="init", destroyMethod="destroy")
public MyFileSystemBean getMyFileSystemBean() {
	return new MyFileSystemBean();
}

תשימו לב ששיטת "init" נקראת כאשר אנו קוראים לשיטת refresh של הקונטקסט ושיטת "destroy" נקראת כאשר אנו קוראים לשיטת close של הקונטקסט.

סיכום

האנוטציה @bean של spring נמצאת בשימוש נרחב ביישומים של spring המבוססים על הזרמת האנוטציות.

ניתן להוריד את הפרויקט של spring המלא ממערכת הניהול שלנו ב־github repository.

Source:
https://www.digitalocean.com/community/tutorials/spring-bean-annotation