Bean là gì

Spring IoC

Như bài xích trước, với Dependency Injection thì các đối tượng sẽ không thể nhờ vào vào nhau. Lúc bắt buộc đối tượng người sử dụng này đang Call cho tới đối tượng kia cùng trở lại. Vây các đối tượng người sử dụng sẽ được tạo thành cùng nằm ở đâu nhằm Lúc đề xuất bọn chúng hoàn toàn có thể call lẫn nhau. Câu trả lời là những đối tượng được đặt vào một form chứa, và form đựng kia đó là 1 phần của IoC.

Bạn đang xem: Bean là gì

Spring Ioc là 1 trong chính sách để giành được bốn tưởng loose-coupling trong Objects dependencies. Đây là tư tưởng nhưng các nguyên tố thao tác làm việc độc lập với nhau. Dể có được bốn tưởng này cũng giống như việc binding các object một bí quyết linc hoạt tại runtime, Objects dependencies được inject vì chưng các object ghxay không giống. Spring IoC container là lịch trình được cho phép inject dependency vào một trong những object cùng khiến cho chuẩn bị để được áp dụng.

Spring IoC container classes là thành phần của org.springframework.beans và org.springframework.context. Spring IoC container cung cấp cho bọn họ không ít 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ợ bí quyết tính năng Spring AOPhường, i18n v.v...

Một trong các các interfaces nhỏ bổ ích của ApplicationContext chính là ConfigurableApplicationContext cùng WebApplicationContext. Spring Framework cung ứng không ít các class implement ApplicationContext mà chúng ta cũng có thể áp dụng nhằm có thể đem được spring context và Spring Bean.

Một vài ba implementations hết sức hữu ích của ApplicationContext implementations nhưng mà chúng ta vẫn hay sử dụng :

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

Đôi khi, nếu như khách hàng thao tác cùng với vận dụng Spring MVC với vận dụng được config để thực hiện Spring Framework, Spring IoC container cũng trở thành được khởi sản xuất lúc application start với lúc một bean được request, dependencies được tự động inject.

Tuy nhiên đối với các áp dụng chủ quyền, bạn phải khởi chế tạo container sống nơi nào đó trong application với sau đó áp dụng nó để mang 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 khổng lồ be initialized via container by providing configuration metadata information.

Spring Bean không tồn tại gì đặc biệt, bất kỳ object làm sao trong Spring framework nhưng mà họ khởi tạo thành trải qua Spring container được Gọi là Spring Bean. Bất kỳ class Java POJO thường thì nào thì cũng có thể là Spring Bean nếu nó được cấu hình để tạo thông qua container bằng cách báo tin metadata thông số kỹ thuật.

Spring Bean Scopes

Có 5 scope khái niệm mang đến Spring Beans.

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

Spring Bean Configuration

Spring Framework provide three ways to configure beans to lớn be used in the application.

Annotation Based Configuration – Bằng câu hỏi sử dụng
Scope annotation.XML Based Configuration – Bằng câu hỏi chế tạo tệp tin XML Spring Configuration nhằm config beans. Nếu bạn sử dụng Spring MVC framework, config dựa trên xml hoàn toàn có thể được load tự động bằng việc viết một bài bác code boiler plate trong web.xml.Java Based Configuration – Đươc tích hòa hợp trường đoản cú Spring 3.0, bạn cũng có thể configure Spring beans áp dụng lịch trình java. Một vài annotations quan trọng được sủ dụng mang lại config dựa trên java là
Bean.

Xem thêm: Hoa Hậu Đỗ Mỹ Linh Sinh Năm, Quê Quán, Tiểu Sử, Sự Nghiệp Và Đời Tư Hoa Hậu

Spring IoC & Spring Bean Example Project

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

*
https://realchampionshipwrestling.com/bean-la-gi/imager_1_6747_700.jpg)

Tiếp hãy quan tiền liền kề những nhân tố khác biệt của Spring IoC cùng Spring Bean project.

XML Based Spring Bean Configuration

MyBean là một trong class Java POJO solo 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 cách á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 sử dụng
Service và scope là Request.

Spring IoC Controller Class

Class HomeController đang giải pháp xử lý những request HTTPhường mang đến home page. Chúng ta đã inject Spring beans vào class controller này trải 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 khổng lồ 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 đề nghị config áp dụng đến Spring Framework nhằm configuration metadata sẽ tiến hành load cùng context được khởi sinh sản.

contextConfigLocation/WEB-INF/spring/root-context.xmlorg.springframework.web.context.ContextLoaderListenerappServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/spring/appServlet/servlet-context.xml1appServlet/Hầu không còn những config ở trên là boiler-plate code được ren vì tool STS tool một biện pháp tự động hóa.

Run the Spring IoC Bean Example Application

Bây tiếng, khi bạn chạy áp dụng website, trang chủ page sẽ tiến hành load và console logs sẽ hiển thị những thông tin nếu như bạn refresh page những lần.

MyBean hashcode=118267258MyAnnotatedBean hashcode=1703899856MyBean hashcode=118267258MyAnnotatedBean hashcode=1115599742MyBean hashcode=118267258MyAnnotatedBean hashcode=516457106Crúc ý rằng MyBean được config là singleton, vì vậy container sẽ luôn luôn luôn luôn được trả về cùng một instance với một. Tương từ bỏ cho mỗi request, một instance của MyAnnotatedBean được tạo nên cùng với hashcode khác nhau.

Java Based Spring Bean Configuration

Với những áp dụng chủ quyền, chúng ta có thể sử dụng config dựa trên annotation hoặc xml. Cả 2 phần lớn ổn định. Yêu cầu độc nhất là khởi tạo context vào lịch trình ở khu vực mà họ vẫn nên nhằm áp dụng 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 đơn giản và dễ dàng với 1 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 thực hiện để 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 chương trình test đơn giản và dễ dàng chỗ nhưng mà chúng ta khởi tạo nên context AnnotationConfigApplicationContext với tiếp đến áp dụng getBean() để đưa instance của MyService.Chú ý rằng tôi đang điện thoại tư vấn method getBean gấp đôi với in hashcode. Do ko gồm scope có mang trong MyService, nó sẽ là singleton cùng hashcode đã tương đương nhau cho cả 2 instance.

khi họ chạy vận dụng sinh hoạt trên, console đã hiển thị nlỗi 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ỉ việc tạo thành file config Spring XML cùng khởi tạo ra context cùng với đoạn code snippet như sau.

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); MyService phầm mềm = context.getBean(MyService.class);

Nguồn

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