Spring Bean Là Gì

Spring IoC

Nhỏng bài trước, cùng với Dependency Injection thì các đối tượng đang không thể dựa vào vào nhau. khi buộc phải đối tượng người sử dụng này vẫn điện thoại tư vấn cho tới đối tượng cơ cùng ngược trở lại. Vây những đối tượng người tiêu dùng sẽ được tạo ra cùng nằm ở chỗ nào để khi phải chúng rất có thể Gọi cho nhau. Câu vấn đáp là các đối tượng được đặt trong một size chứa, và khung đựng đó đó là một phần của IoC.Quý khách hàng sẽ xem: Spring bean là gì

Spring Ioc là 1 hình thức để giành được bốn tưởng loose-coupling vào Objects dependencies. Đây là bốn tưởng mà lại những yếu tố thao tác độc lập với nhau. Dể đã có được bốn tưởng này cũng giống như vấn đề binding các object một biện pháp linch hoạt tại runtime, Objects dependencies được inject vị những object ghxay khác. Spring IoC container là lịch trình chất nhận được inject dependency vào trong 1 object cùng làm cho chuẩn bị sẵn sàng để được áp dụng.

Bạn đang xem: Spring bean là gì

Spring IoC container classes là yếu tắc của org.springframework.beans và org.springframework.context. Spring IoC container cung ứng đến chúng ta tương đối nhiều phương pháp để decouple những đối tượng người tiêu dùng dependencies.

BeanFactory là root interface của Spring IoC container. ApplicationContext là child interface của BeanFactory interface - hỗ trợ phương pháp tính năng Spring AOPhường, i18n v.v...

Một trong số những interfaces bé bổ ích của ApplicationContext chính là ConfigurableApplicationContext và WebApplicationContext. Spring Framework hỗ trợ không hề ít các class implement ApplicationContext mà chúng ta cũng có thể áp dụng nhằm rất có thể rước được spring context và Spring Bean.

Một vài ba implementations khôn xiết hữu dụng của ApplicationContext implementations cơ mà chúng ta đang xuất xắc dùng :

AnnotationConfigApplicationContext: Nếu bọn họ áp dụng Spring trong số áp dụng java tự do cùng áp dụng annotations đến bài toán thông số kỹ thuật, thì bạn có thể áp dụng nó để khởi tạo container cùng mang các đối tượng người tiêu dùng bean.ClassPathXmlApplicationContext: Nếu họ bao gồm spring been config xml tệp tin trong vận dụng tự do, thì có thể áp dụng class này nhằm load tệp tin và rước containter object.FileSystemXmlApplicationContext: Tương trường đoản cú với ClassPathXmlApplicationContext trừ câu hỏi tệp tin xml configuration rất có thể dược load tự ngẫu nhiên nơi nào trong hệ thống.AnnotationConfigWebApplicationContext và XmlWebApplicationContext cho những ứng dụng website.

thường thì, nếu như khách hàng thao tác làm việc với vận dụng Spring MVC với ứng dụng được config nhằm thực hiện Spring Framework, Spring IoC container cũng biến thành được khởi chế tạo ra Lúc application start cùng lúc một bean được request, dependencies được auto inject.

Tuy nhiên so với các vận dụng hòa bình, bạn cần phải khởi tạo container nghỉ ngơi chỗ nào đó trong application cùng tiếp đến thực hiện nó để đưa spring beans.

Spring Bean

Spring Bean is nothing special, any object in the Spring framework that we initialize through Spring container is called Spring Bean . Any normal Java POJO class can be a Spring Bean if it’s configured to lớn be initialized via container by providing configuration metadata information.

Spring Bean không có gì quan trọng đặc biệt, ngẫu nhiên object nào trong Spring framework cơ mà chúng ta khởi chế tác trải qua Spring container được Điện thoại tư vấn là Spring Bean. Bất kỳ class Java POJO thông thường nào cũng có thể là Spring Bean giả dụ nó được cấu hình để có thể tạo trải qua container bằng phương pháp đưa thông tin metadata cấu hình.

Spring Bean Scopes

Có 5 scope định nghĩa cho Spring Beans.

singleton – Chỉ 1 instance của bean được tạo nên trong mỗi container. Đây là scope default mang lại spring beans. lúc áp dụng scope này, bảo vệ rằng bearn không nội dung instance nếu như ko nó vẫn nhận đến vấn đề bất ổn vào tài liệu.prototype – Một instance mới sẽ được tạo ra những lần bean được request.request – Khá như thể prototype scope, mặc dù nó được thực hiện mang đến ứng dụng website. Một instance bắt đầu của bean sẽ được tạo thành cho mỗi HTTP request.session – Một bean new sẽ tiến hành chế tạo cho mỗi HTTP. session do container.global-session – Cái này được sử dụng để chế tác những global session beans cho các áp dụng Portlet.Spring Framework có công dụng không ngừng mở rộng được với chúng ta cũng có thể tạo scope riêng ví như ưa thích, tuy vậy, phần nhiều hầu hết thời điểm thì các scope được hỗ trợ bởi vì framework là quá đủ rồi.

Spring Bean Configuration

Spring Framework provide three ways khổng lồ configure beans to be used in the application.

Annotation Based Configuration – Bằng vấn đề thực hiện Scope annotation.XML Based Configuration – Bằng việc chế tạo ra file XML Spring Configuration nhằm config beans. Nếu các bạn áp dụng Spring MVC framework, config dựa vào xml hoàn toàn có thể được load tự động bởi việc viết một bài xích code boiler plate vào website.xml.Java Based Configuration – Đươc tích hợp tự Spring 3.0, chúng ta cũng có thể configure Spring beans thực hiện công tác java. Một vài ba annotations đặc biệt được sủ dụng đến config dựa trên java là Bean.

Spring IoC and Spring Bean Example Project

Hãy quan tiền cạnh bên một mặt khác của Spring IoC container cùng Spring Bean configurations với cùng một dự án Spring đơn giản dễ dàng.lấy ví dụ, tôi tạo ra một dự án Spring MVC project vào Spring Tool Suite.Cấu trúc dự án công trình đang trông như vậy này.

Xem thêm: Xin Zhao Mùa 11: Cách Chơi, Lên Đồ & Bảng Ngọc Xin Zhao Rừng


*

https://diywkfbv.com/spring-bean-la-gi/imager_1_21386_700.jpg)

Tiếp hãy quan cạnh bên những nhân tố khác hoàn toàn của Spring IoC cùng Spring Bean project.

XML Based Spring Bean Configuration

MyBean là 1 trong class Java POJO đối chọi giản

package com.journaldev.spring.beans;public class MyBean private String name;public String getName() return name;public void setName(String name) this.name = name;

Spring Configuration XML File

servlet-context.xml code:

Chú ý rằng MyBean được config bằng phương pháp áp dụng bean element với scope là singleton.

Annotation Based Spring Bean Configuration

package com.journaldev.spring.beans;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Service;import org.springframework.website.context.WebApplicationContext;Scope(WebApplicationContext.SCOPE_REQUEST)public class MyAnnotatedBean private int empId;public int getEmpId() return empId;public void setEmpId(int empId) this.empId = empId;MyAnnotatedBean được config thực hiện Service cùng scope là Request.

Spring IoC Controller Class

Class HomeController đang xử trí các request HTTPhường cho home page. Chúng ta vẫn inject Spring beans vào class controller này thông qua WebApplicationContext container.

package com.journaldev.spring.controller;import java.text.DateFormat;import java.util.Date;import java.util.Locale;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.journaldev.spring.beans.MyAnnotatedBean;import com.journaldev.spring.beans.MyBean;Scope("request")public class HomeController private MyBean myBean;private MyAnnotatedBean myAnnotatedBean;Autowiredpublic void setMyAnnotatedBean(MyAnnotatedBean obj) this.myAnnotatedBean = obj;/** * Simply selects the home page view lớn render by returning its name. */RequestMapping(value = "/", method = RequestMethod.GET)public String home(Locale locale, Model model) System.out.println("MyBean hashcode="+myBean.hashCode());System.out.println("MyAnnotatedBean hashcode="+myAnnotatedBean.hashCode());Date date = new Date();DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);String formattedDate = dateFormat.format(date);Model.addAttribute("serverTime", formattedDate );return "home";

Deployment Descriptor

Chúng ta buộc phải config áp dụng đến Spring Framework để configuration metadata sẽ được load cùng context được khởi tạo.

contextConfigLocation/WEB-INF/spring/root-context.xmlorg.springframework.website.context.ContextLoaderListenerappServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/spring/appServlet/servlet-context.xml1appServlet/Hầu không còn những config sinh hoạt trên là boiler-plate code được gen do tool STS tool một bí quyết tự động.

Run the Spring IoC Bean Example Application

Bây tiếng, khi chúng ta chạy vận dụng website, trang chính page sẽ được load cùng console logs vẫn hiển thị các đọc tin nếu bạn refresh page nhiều lần.

MyBean hashcode=118267258MyAnnotatedBean hashcode=1703899856MyBean hashcode=118267258MyAnnotatedBean hashcode=1115599742MyBean hashcode=118267258MyAnnotatedBean hashcode=516457106Chụ ý rằng MyBean được config là singleton, cho nên vì thế container vẫn luôn luôn luôn được trả về và một instance cùng một. Tương trường đoản cú cho mỗi request, một instance của MyAnnotatedBean được chế tác với hashcode khác nhau.

Java Based Spring Bean Configuration

Với các vận dụng tự do, chúng ta có thể áp dụng config dựa vào annotation hoặc xml. Cả 2 những ổn. Yêu cầu độc nhất vô nhị là khởi sinh sản context trong công tác sống chỗ nhưng họ vẫn yêu cầu nhằm thực hiện nó.

package com.journaldev.spring.main;import java.util.Date;public class MyService public void log(String msg)System.out.println(new Date()+"::"+msg);MyService là 1 trong những class java dễ dàng và đơn giản với cùng một vài ba method.

package com.journaldev.spring.main;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;Beanpublic MyService getService()return new MyService();}Config class dựa trên annotation sẽ được sử dụng để tạo Spring container.

package com.journaldev.spring.main;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class MyMainClass public static void main(String args) AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyConfiguration.class);MyService service = ctx.getBean(MyService.class);service.log("Hi");MyService newService = ctx.getBean(MyService.class);System.out.println("service hashcode="+service.hashCode());System.out.println("newService hashcode="+newService.hashCode());ctx.close();Một lịch trình thử nghiệm đơn giản vị trí mà lại bọn họ khởi chế tác context AnnotationConfigApplicationContext và tiếp nối áp dụng getBean() để đưa instance của MyService.Chú ý rằng tôi sẽ gọi method getBean gấp đôi cùng in hashcode. Do ko gồm scope có mang trong MyService, nó vẫn là singleton với hashcode vẫn như thể nhau cho cả 2 instance.

lúc bọn họ chạy áp dụng sống bên trên, console vẫn hiển thị như sau

Sat Dec 28 22:49:18 PST 2013::Hiservice hashcode=678984726newService hashcode=678984726Nếu bạn có nhu cầu config dựa vào XML, chỉ cần tạo nên file config Spring XML và khởi sinh sản context cùng với đoạn code snippet nlỗi sau.

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); MyService tiện ích = context.getBean(MyService.class);

Nguồn

http://www.journaldev.com/2461/spring-ioc-bean-example-tutorial