Spring IoC

Như bài trước, với Dependency Injection thì các đối tượng người dùng sẽ không hề dựa vào vào nhau. Lúc cần đối tượng này sẽ hotline tới đối tượng kia cùng ngược lại. Vây các đối tượng người tiêu dùng sẽ được tạo ra và nằm ở đâu để khi yêu cầu chúng hoàn toàn có thể gọi lẫn nhau. Câu vấn đáp là các đối tượng người tiêu dùng được để trong một size chứa, với khung chứa đó bao gồm là một trong những phần của IoC.

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

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

Spring Ioc là một cơ chế để có được tư tưởng loose-coupling trong Objects dependencies. Đây là tứ tưởng mà các thành phần làm cho việc độc lập với nhau. Dể đã đạt được tư tưởng này cũng giống như việc binding những object một biện pháp linh hoạt tại runtime, Objects dependencies được inject bởi những object ghép khác. Spring IoC container là chương trình có thể chấp nhận được inject dependency vào một object và để cho sẵn sàng sẽ được sử dụng.

Spring IoC container classes là nhân tố của org.springframework.beans và org.springframework.context. Spring IoC container hỗ trợ cho bọn họ rất nhiều phương pháp để decouple các đối tượng người dùng dependencies.

BeanFactory là root interface của Spring IoC container. ApplicationContext là child interface của BeanFactory interface - cung ứng cách công dụng Spring AOP, i18n v.v...

Một trong số các interfaces nhỏ hữu ích của ApplicationContext đó là ConfigurableApplicationContext và WebApplicationContext. Spring Framework cung ứng rất nhiều những class implement ApplicationContext mà chúng ta cũng có thể sử dụng để hoàn toàn có thể lấy được spring context cùng Spring Bean.

Một vài ba implementations rất bổ ích của ApplicationContext implementations mà chúng ta sẽ hay sử dụng :

AnnotationConfigApplicationContext: Nếu bọn họ sử dụng Spring trong số ứng dụng java độc lập và thực hiện annotations cho câu hỏi cấu hình, thì bạn cũng có thể sử dụng nó để khởi tạo container cùng lấy các đối tượng bean.ClassPathXmlApplicationContext: Nếu họ có spring been config xml tệp tin trong vận dụng độc lập, thì có thể sử dụng class này để load file với lấy containter object.FileSystemXmlApplicationContext: tương tự như với ClassPathXmlApplicationContext trừ vấn đề file xml configuration hoàn toàn có thể dược load từ bất kỳ nơi làm sao trong hệ thống.AnnotationConfigWebApplicationContext với XmlWebApplicationContext cho những ứng dụng web.

Thông thường, trường hợp bạn làm việc với ứng dụng Spring MVC và áp dụng được config để thực hiện Spring Framework, Spring IoC container cũng trở thành được khởi chế tạo ra khi application start và khi 1 bean được request, dependencies được tự động hóa inject.

Tuy nhiên đối với các ứng dụng độc lập, bạn phải khởi tạo nên container ở ở đâu đó vào application và tiếp nối sử 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 to be initialized via container by providing configuration metadata information.

Spring Bean không tồn tại gì quánh biệt, bất kỳ object làm sao trong Spring framework mà họ khởi tạo thông qua Spring container được call là Spring Bean. Ngẫu nhiên class Java POJO thông thường nào cũng rất có thể là Spring Bean trường hợp nó được cấu hình để khởi tạo trải qua container bằng cách cung cấp 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 trong mỗi container. Đây là scope default mang đến spring beans. Khi thực hiện scope này, bảo đảm rằng bearn không chia sẻ instance ví như ko nó sẽ dấn cho vấn đề bất ổn trong dữ liệu.prototype – Một instance mới sẽ được tạo các lần bean được request.request – Khá như là prototype scope, tuy nhiên nó được áp dụng cho vận dụng web. Một instance new của bean sẽ được tạo cho mỗi HTTP request.session – Một bean mới sẽ tiến hành tạo cho mỗi HTTP session vày container.global-session – tính năng này được áp dụng để tạo các global session beans cho những ứng dụng Portlet.Spring Framework có chức năng mở rộng được và chúng ta cũng có thể tạo scope riêng giả dụ thích, tuy nhiên, phần đông mọi thời điểm thì những scope được cung cấp bởi framework là quá đầy đủ rồi.

Spring Bean Configuration

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

Hãy quan cạnh bên một mặt khác của Spring IoC container cùng Spring Bean configurations với một dự án Spring solo giản.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 sẽ trông như thế này.


*

https://ionianisia-region.com/spring-bean-la-gi/imager_1_1451_700.jpg)

Tiếp hãy quan sát các thành phần 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 1-1 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 sử dụng bean element cùng 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.web.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 và scope là Request.

Spring IoC Controller Class

Class HomeController đang xử lý các request HTTP cho trang chủ page. Chúng ta sẽ 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 view to 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 bắt buộc config ứng dụng cho Spring Framework để configuration metadata sẽ tiến hành load với context được khởi tạo.

contextConfigLocation/WEB-INF/spring/root-context.xmlorg.springframework.web.context.ContextLoaderListenerappServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/spring/appServlet/servlet-context.xml1appServlet/Hầu hết những config sinh sống trên là boiler-plate code được gen vị tool STS tool một biện pháp tự động.

Run the Spring IoC Bean Example Application

Bây giờ, khi bạn chạy ứng dụng web, home page sẽ được load cùng console logs vẫn hiển thị các thông tin nếu như bạn refresh page các lần.

MyBean hashcode=118267258MyAnnotatedBean hashcode=1703899856MyBean hashcode=118267258MyAnnotatedBean hashcode=1115599742MyBean hashcode=118267258MyAnnotatedBean hashcode=516457106Chú ý rằng MyBean được config là singleton, do đó container sẽ luôn luôn luôn được trả về cùng một instance với một. Tương tự cho từng request, một instance của MyAnnotatedBean được tạo thành với hashcode khác nhau.

Java Based Spring Bean Configuration

Với những ứng dụng độc lập, bạn có thể sử dụng config dựa trên annotation hoặc xml. Cả 2 đều ổn. Yêu mong duy độc nhất vô nhị là khởi tạo thành context trong chương trình ở nơi mà bọn họ sẽ đề nghị để á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 dễ dàng với một vài 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 vào annotation sẽ tiến hành sử dụng để có thể tạo Spring container.

Xem thêm: Nghĩa Của Từ Stride Là Gì ? Stride Là Gì, Nghĩa Của Từ Stride

Khi chúng ta chạy ứng dụng ở trên, console đã hiển thị như sau

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

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); MyService ứng dụng = context.getBean(MyService.class);

Nguồn

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