Spring Beans

Στο Spring, τα αντικείμενα που αποτελούν τη ραχοκοκαλιά της εφαρμογής και διαχειρίζονται από το Spring IoC Container λέγονται beans. Το bean είναι ένα αντικείμενο, το οποίο αρχικοποιείται, δημιουργείται και διαχείριζεται από το Spring IoC container. Αλλιώς, είναι ένα από τα πολλά αντικείμενα τις εφαρμογής.

Μέσα στο Spring Container, τα bean definitions αναπαρίστανται ως BeanDefinititon αντικείμενα, τα οποία περιέχουν τα ακόλουθα μεταδεδομένα :

Ονομασία των beans

Κάθε 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

Ο κανόνας ονομασίας των beans είναι αυτός, οποίος χρησιμοποιεί και η Java για τα πεδία των κλάσεων. Τα ονόματα των beans ξεκινάνε με μικρό γράμμα και είναι camel-cased απο κεί και πέρα. Για παράδειγμα, accountService, loginController.

Bean Scopes

Όταν δημιουργούμε ένα 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 του χρήστη.
Πως δηλώνουμε το bean scope
1. Με XML
            
                <?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>
             
            
2. Με annotation
               
                @Component("demoBean") 
                @Scope("prototype") 
                public class Demo {

                        public void sayHello(String name){
                           System.out.println("Hello " + name);
                        }

                }
               
           
Πηγές