שירות אוטומטי של גוגל

1. הקדמה

במדריך מהיר זה נסביר בקצרה על שירות AutoService של גוגל.

זוהי ספריית מעבדי הערות המסייעת לנו ביצירת קבצי תצורה של ממשק ספקי שירות Java (SPI).

2. Java SPI

במילים פשוטות, אנו יכולים למנף את Java SPI לפיתוח יישומים הניתנים להרחבה, מכיוון שהוא מספק התאמות אישיות מהירות, בטוחות וגם דינמיות.

Java SPI משתמש בקובצי תצורה כדי למצוא ולהעמיס יישומים קונקרטיים של ממשקי נותן שירותים נתונים. התאמה אישית של יישום בזמן אמת היא אחת היכולות העיקריות שלו.

מצד שני, קל להגדיר תצורה שגויה וגם קצת מבלבל אותנו להוסיף או לערוך את קבצי התצורה. קל לשכוח את הצעד הזה.

חוץ מזה, תמיד קיים סיכון של שגיאות הקלדה שלא נבחין בהם, מכיוון שקובץ התצורה אינו נחשב על ידי המהדר.

3. שירות אוטומטי של גוגל

שירות Google AutoService הוא כלי מחולל קוד פתוח, שפותח במסגרת פרויקט Google Auto. ישנם גם שני כלים נוספים מלבד AutoService: AutoValue ו- AutoFactory.

מטרתה של ספרייה זו היא לחסוך מאמץ וזמן ובאותו זמן, כדי למנוע תצורה שגויה.

3.1. הגדרת Maven

ראשית, בואו נוסיף את התלות בשירות האוטומטי ביישום שלנו. אנו יכולים להגדיר את התלות כ- אופציונאלי כי אנחנו צריכים את זה רק בזמן הידור:

 com.google.auto.service שירות אוטומטי 1.0-rc5 נכון 

3.2. @שירות אוטומטי דוגמא

שנית, ניצור ממשק ספקי שירות.

נניח שליישום שלנו יש תכונת תרגום. אנו שואפים להפוך את התכונה הזו להרחבה. לכן אנו יכולים לחבר כל רכיב של ספקי תרגום בקלות:

ממשק ציבורי TranslationService {מחרוזת לתרגם (הודעת מחרוזת, אזור מ, אזור ל); }

היישום שלנו ישתמש בממשק זה כנקודת הרחבה. יישום על מסלול הכיתה יוזרק כמרכיב.

לאחר מכן, נבצע שירות זה עם שני ספקי תרגום שונים המשתמשים ב- @שירות אוטומטי ביאור:

@AutoService (TranslationService.class) מחלקה ציבורית BingTranslationServiceProvider מיישם TranslationService {@Override public מחרוזת מתורגמת (הודעת מחרוזת, אזור מ, אזור ל) {// פרטי הטמעה החזרת הודעה + "(תורגם על ידי בינג)"; }}
@AutoService (TranslationService.class) מחלקה ציבורית GoogleTranslationServiceProvider מיישם TranslationService {@Override public מחרוזת מתורגמת (הודעת מחרוזת, אזור מ, אזור ל) {// פרטי הטמעה החזרת הודעה + "(תורגם על ידי גוגל)"; }}

בזמן ההידור AutoService יחפש את ההערה וייצור קובץ תצורה עבור כל אחד מהממשקים והיישומים המתאימים.

כתוצאה מכך יהיה לנו כעת קובץ תצורה בשם com.baeldung.autoservice.TranslationService. קובץ זה מכיל שמות מוסמכים לחלוטין של שני הספקים:

com.baeldung.autoservice.BingTranslationServiceProvider com.baeldung.autoservice.GoogleTranslationServiceProvider

3.3. @שירות אוטומטי בִּפְעוּלָה

עכשיו הכל מוכן. בואו נטען את הספקים ServiceLoader:

Loader ServiceLoader = ServiceLoader.load (TranslationService.class);

ה ServiceLoader יטען כל ספק שהוגדר בקובץ התצורה.

בואו לבדוק את ספירת הספקים הטעונים:

ספירה ארוכה = StreamSupport.stream (loader.spliterator (), false) .count (); assertEquals (2, count);

במילים אחרות, ה ServiceLoader טען את כל מופעי הספק. לכן תפקידנו לבחור אחד מהם.

אז עכשיו, בואו לבחור אחד מהספקים ואז להתקשר לשיטת השירות כדי לראות אם המטעין עובד כצפוי:

TranslationService googleService = StreamSupport.stream (loader.spliterator (), false) .filter (p -> p.getClass (). GetSimpleName (). שווה ("GoogleTranslationServiceProvider")) .findFirst () .get (); הודעת מחרוזת = "הודעה"; assertEquals (הודעה + "(תורגם על ידי גוגל)", googleService.translate (הודעה, null, null));

4. מסקנה

במאמר זה הסברנו על ספריית Google AutoService וגם התאמנו בדוגמה פשוטה.

שירות אוטומטי של גוגל הוא ספריית מחוללי קוד מקור שימושית אך פשוטה. זה חוסך מאיתנו ליצור ולערוך את קבצי התצורה של ספק השירות. זה גם מבטיח שלא יהיו קבצים שלא טענו או שגויים.

קוד המקור של הדרכה זו זמין כרגיל בפרויקט GitHub.


$config[zx-auto] not found$config[zx-overlay] not found