Στο Spring, τα αντικείμενα που αποτελούν τη ραχοκοκαλιά της εφαρμογής και διαχειρίζονται από το Spring IoC Container λέγονται beans. Το bean είναι ένα αντικείμενο, το οποίο αρχικοποιείται, δημιουργείται και διαχείριζεται από το Spring IoC container. Αλλιώς, είναι ένα από τα πολλά αντικείμενα τις εφαρμογής.
Μέσα στο Spring Container, τα bean definitions αναπαρίστανται ως BeanDefinititon αντικείμενα, τα οποία περιέχουν τα ακόλουθα μεταδεδομένα :
Κάθε bean έχει ένα ή περισσότερα αναγνωριστικά. Τα αναγνωριστικά πρέπει, να είναι μοναδικά μέσα στο container , το οποίο φιλοξενεί το bean. Συνήθως κάθε bean έχει ένα μόνο αναγνωριστικό.
Στη περίπτωση του XML configuration, χρησιμοποιούμε το id attribute, το name attribute ή και τα δύο για το αναγνωριστικό του bean. Το id attribute μας επιτρέπει, να δηλώσουμε ένα μόνο id. Τα ονόματα μπορούν, να περιέχουν απλούς χαρακτήρες ('myBean'), αλλά και ειδικούς χαρακτήρες. Στην περιπτώση των annotations, δηλώνουμε το αναγνωριστικό στην παράμετρο, που παίρνουν : @Component('myBean'), @Bean('myBean'), @Service('myBean') κλπ.
Η δήλωση αναγνωριστικού για το bean δεν είναι υποχρεωτική. Εάν δηλώσουμε ρητά το id ή το name, το container παράγει ένα μοναδικό όνομα για το bean. Εάν θέλουμε, να αναφερθούμε στο bean μέσω ονόματος,χρησιμοποιώντας το ref element, τότε πρέπει, δώσουμε ένα όνομα.
Ο κανόνας ονομασίας των beans είναι αυτός, οποίος χρησιμοποιεί και η Java για τα πεδία των κλάσεων. Τα ονόματα των beans ξεκινάνε με μικρό γράμμα και είναι camel-cased απο κεί και πέρα. Για παράδειγμα, accountService, loginController.
Όταν δημιουργούμε ένα bean definition, δημιουργούμε μια συνταγή για τη δημιουργία πραγματικών στιγμιοτύπων της κλάσης, η οποία ορίζεται στο bean definition. Η ιδέα ότι ένα bean definition είναι μια συνταγή, είναι σημαντική επειδή σημαίνει πως όπως και με την κλαση, μπορούμε να δημιουργήσουμε πολλά στιγμιότυπα από την ίδια συνταγή.
Μπορούμε να ρυθμίσουμε τις διάφορες εξαρτήσεις και τις τιμές των ρυθμίσεων, οι οποίες θα εισαχθούν σε ένα αντικείμενο, που θα δημιουργηθεί από μια συγκεκριμένη συνταγή και το scope του αντικένου αυτόυ. To Spring υποστηρίζει διάφορα είδη scope
Scope | Περιγραφή |
---|---|
Singleton | Το Spring Container δημιουργεί ένα μοναδικό στιγμιότυπο και επιστρέφει αυτό, κάθε φορά που πραγματοποιείται ένα αίτημα για ένα αντικείμενο με το ίδιο id. |
Prototype | Το Spring Container επιστρέφει ένα καινούριο στιγμιότυπο, κάθε φορά που πραγματοποιείται ένα αίτημα για ένα συγκεκριμένο αντικείμενο. |
Request | Το Spring Container επιστρέφει ένα καινούριο στιγμιότυπο, κάθε φορά που ο client πραγμοτοποιεί ένα HTTP αίτημα. |
Session | Το Spring Container επιστρέφει ένα καινούριο στιγμιότυπο, για κάθε session του χρήστη. |
<?xml version="1.0" encoding=UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="demoBean" class="com.test.Demo" scope="session"></bean>
</beans>
@Component("demoBean")
@Scope("prototype")
public class Demo {
public void sayHello(String name){
System.out.println("Hello " + name);
}
}