Mục đích của bài này là tìm hiểu về instance trong java. Ví dụ cụ thể cách để sử dụng interface Instance trong java như thế nào.


Bạn đang xem: Instance trong java là gì

1. Cú pháp của instance trong java

Để sử dụng instance trong java cần import package: javax.enterprise.inject.

Cú pháp của instance trong java như sau:

public interface Instance extends Iterable, Provider Tham khảo thêm ở các trang web sau:

2. Tạo project Quarkus

Tạo project Quarkus bằng cách sử dụng lệnh sau:

mvn io.quarkus:quarkus-maven-plugin:1.12.2.Final:create \ -DprojectGroupId=tekkenbasara.mobi \ -DprojectArtifactId=Instance-javaThêm dependency quarkus-resteasy-jackson vào file pom.xml. Mục đích cho viết API sau đó. io.quarkus quarkus-resteasy-jackson

3. Viết code

Lấy ví dụ để sử dụng instance trong java như sau:

Giả sử cần build một object lớn có nhiều thuộc tính để gửi qua một remote service. Object lớn có dạng như sau:

{ "data1": { "item1": "item 1", "item12": "item 12" }, "data2": { "item2": "item 2" }, "data3": { "item3": "Item 3", "item31": "Item 31" }}Mỗi thuộc tính sẽ có một service chịu trách nhiệm build dữ liệuHiện thực ví dụ trên bằng code java như sau:

Đầu tiên, tạo ra lớp Data1 gồm 2 attribute đó là item1, item12 như sau:

package tekkenbasara.mobi.model;public class Data1 { private String item1; private String item12; public String getItem1() { return item1; } public void setItem1(String item1) { this.item1 = item1; } public String getItem12() { return item12; } public void setItem12(String item12) { this.item12 = item12; }
Override public String toString() { return "Data1{" + "item1="" + item1 + "\"" + ", item12="" + item12 + "\"" + "}"; }}Thêm lớp Data2 có 1 thuộc tính đó là item2 như sau:

package tekkenbasara.mobi.model;public class Data2 { private String item2; public String getItem2() { return item2; } public void setItem2(String item2) { this.item2 = item2; }
Override public String toString() { return "Data2{" + "item2="" + item2 + "\"" + "}"; }}Tạo lớp Data3 có 2 thuộc tính đó là item3, item31 như sau:

package tekkenbasara.mobi.model;public class Data3 { private String item3; private String item31; public String getItem3() { return item3; } public void setItem3(String item3) { this.item3 = item3; } public String getItem31() { return item31; } public void setItem31(String item31) { this.item31 = item31; }
Override public String toString() { return "Data3{" + "item3="" + item3 + "\"" + ", item31="" + item31 + "\"" + "}"; }}Thêm lớp Data gồm 3 thuộc tính đó là data1, data2, data3 như sau:

package tekkenbasara.mobi.model;public class Data { private Data1 data1; private Data2 data2; private Data3 data3; public Data1 getData1() { return data1; } public void setData1(Data1 data1) { this.data1 = data1; } public Data2 getData2() { return data2; } public void setData2(Data2 data2) { this.data2 = data2; } public Data3 getData3() { return data3; } public void setData3(Data3 data3) { this.data3 = data3; }
Override public String toString() { return "Data{" + "data1=" + data1 + ", data2=" + data2 + ", data3=" + data3 + "}"; }}Tạo một interface IService, có một phương thức addData, tham số truyền vào có kiểu là lớp Data.

package tekkenbasara.mobi.service;import tekkenbasara.mobi.model.Data;public interface IService { void addData(Data data);}Lần lượt tạo 3 service để implement IService như sau:

Service1 dùng để thêm dữ liệu cho thuộc tính data1 trong lớp Data.

package tekkenbasara.mobi.service;import tekkenbasara.mobi.model.Data;import tekkenbasara.mobi.model.Data1;import javax.enterprise.context.ApplicationScoped;
ApplicationScopedpublic class Service1 implements IService{
Override public void addData(Data data) { Data1 data1 = new Data1(); data1.setItem1("item 1"); data1.setItem12("item 12"); data.setData1(data1); }}Service2 dùng để thêm dữ liệu cho thuộc tính data2 trong lớp Data

package tekkenbasara.mobi.service;import tekkenbasara.mobi.model.Data;import tekkenbasara.mobi.model.Data2;import javax.enterprise.context.ApplicationScoped;

Xem thêm: Thông Cáo Báo Chí Tiếng Anh Là Gì, Đặc Điểm, Nội Dung Và Cấu Trúc

ApplicationScopedpublic class Service2 implements IService{
Override public void addData(Data data) { Data2 data2 = new Data2(); data2.setItem2("item 2"); data.setData2(data2); }}‘

Service3 dùng để thêm dữ liệu cho thuộc tính data3 trong lớp Data

package tekkenbasara.mobi.service;import tekkenbasara.mobi.model.Data;import tekkenbasara.mobi.model.Data3;import javax.enterprise.context.ApplicationScoped;
ApplicationScopedpublic class Service3 implements IService{
Override public void addData(Data data) { Data3 data3 = new Data3(); data3.setItem3("Item 3"); data3.setItem31("Item 31"); data.setData3(data3); }}Tạo lớp TestService để sử dụng Instance trong java như sau:

package tekkenbasara.mobi.service;import tekkenbasara.mobi.model.Data;import javax.enterprise.context.ApplicationScoped;import javax.enterprise.inject.Instance;import javax.inject.Inject;
ApplicationScopedpublic class TestService {
Inject Instance services; public Data addData() { Data data = new Data(); for (IService service : services) { service.addData(data); } return data; }}Phân tích code trong chương trình trên:

Instance services: Tạo ra tất cả instance của tất cả các lớp đã implement interface IServicepublic Data addData() {…}: Khi gọi service.addData(data) thì nó sẽ gọi thực thi hàm addData(data) ở trong các lớp đã implement interface IService. Cụ thể ở trong ví dụ trên, nó sẽ gọi thực thi hàm addData(data) ở 3 lớp đó là Service1, Service2, Serivce3.

Tạo lớp TestController để kiểm tra lại lớp Data đã được thêm tất cả dữ liệu cho các thuộc tính data1, data2, data3 như sau:

package tekkenbasara.mobi.controller;import tekkenbasara.mobi.service.TestService;import tekkenbasara.mobi.model.Data;import javax.inject.Inject;import javax.ws.rs.GET;import javax.ws.rs.Path;
Path("/test")public class TestController {
Inject TestService testService;
GET public Data getData() { return testService.addData(); }}Chạy chương trình quarkus bằng lệnh sau:

mvnw clean quarkus:devKết quả sau khi chạy API (/test) như sau:

*

4. Source code (Instance java)

Để xem chi tiết source code trong bài viết này bằng cách download source code ở link sau:

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *