<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Guice Archives - Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/tag/guice/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/tag/guice/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Tue, 05 Mar 2024 06:19:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Guice Archives - Tomoshare</title>
	<link>https://blog.tomosia.com.vn/tag/guice/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Dependency Injection (DI) framework &#8211; Google Guice</title>
		<link>https://blog.tomosia.com.vn/dependency-injection-di-framework-google-guice/</link>
					<comments>https://blog.tomosia.com.vn/dependency-injection-di-framework-google-guice/#comments</comments>
		
		<dc:creator><![CDATA[admin_tomosia]]></dc:creator>
		<pubDate>Tue, 05 Mar 2024 06:19:13 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Dependency Injection]]></category>
		<category><![CDATA[Guice]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=3189</guid>

					<description><![CDATA[<p>Trong bài trước, chúng ta đã được đi tìm hiểu Dependency Injection là gì. Tiếp tục chuỗi thông&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/dependency-injection-di-framework-google-guice/">Dependency Injection (DI) framework &#8211; Google Guice</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="font-size:16px">Trong bài trước, chúng ta đã được đi tìm hiểu <strong><a href="http://blog.tomosia.com.vn/thong-nao-dependency-injection-bang-eimi-fukada/">Dependency Injection</a></strong> là gì. Tiếp tục chuỗi thông não, chúng ta cùng nhau làm tý &#8220;inova&#8221; với cái thằng Google Guice này nhé.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="332" height="456" src="http://blog.tomosia.com.vn/wp-content/uploads/2024/03/1_OXaU46Rv8B3MV7YuaAanaA.png" alt="" class="wp-image-3190" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2024/03/1_OXaU46Rv8B3MV7YuaAanaA.png 332w, https://blog.tomosia.com.vn/wp-content/uploads/2024/03/1_OXaU46Rv8B3MV7YuaAanaA-218x300.png 218w" sizes="(max-width: 332px) 100vw, 332px" /></figure>
</div>


<h2 id="1-google-guice-la-gi" class="wp-block-heading" style="font-size:30px"><strong>1. Google Guice là gì?</strong></h2>



<p style="font-size:16px"><strong>Google Guice</strong> là một framework DI gọn nhẹ, mã nguồn mở giúp chúng ta phát triển các ứng dụng dạng module được phát triển và quản lý bởi Google. Guice hỗ trợ từ Java 6 trở lên nhé anh em.</p>



<p style="font-size:16px">Trong Guice, annotation&nbsp;<strong>@Inject</strong>&nbsp;được sử dụng để tiêm phụ thuộc. Nó cho phép chúng ta inject sự phụ thuộc tại các constructor, field hoặc method. Sử dụng Guice, chúng ta có thể xác định scope của instance đối tượng phụ thuộc. Nó cũng có các tính năng để tích hợp với Spring và&nbsp;<a href="https://github.com/google/guice/wiki/AOP">Aspect Oriented Programming (AOP)</a>.</p>



<h2 id="2-cai-dat-google-guice" class="wp-block-heading" style="font-size:30px"><strong>2. Cài đặt&nbsp;Google Guice</strong></h2>



<p style="font-size:16px">Để sử dụng<strong> Google Guice</strong>, anh em thêm thư viện Guice vào trong file <em>pom.xml</em> như sau:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Java</span><span role="button" tabindex="0" data-code="&lt;!-- https://mvnrepository.com/artifact/com.google.inject/guice --&gt;
&lt;dependency&gt;
    &lt;groupId&gt;com.google.inject&lt;/groupId&gt;
    &lt;artifactId&gt;guice&lt;/artifactId&gt;
    &lt;version&gt;4.2.2&lt;/version&gt;
&lt;/dependency&gt;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">&lt;!--</span><span style="color: #F6F6F4"> https</span><span style="color: #F286C4">:</span><span style="color: #7B7F8B">//mvnrepository.com/artifact/com.google.inject/guice --&gt;</span></span>
<span class="line"><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">dependency</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">groupId</span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4">com.google.inject</span><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">groupId</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">artifactId</span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4">guice</span><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">artifactId</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">version</span><span style="color: #F286C4">&gt;</span><span style="color: #BF9EEE">4.2</span><span style="color: #F6F6F4">.</span><span style="color: #EE6666; font-style: italic; text-decoration: underline">2</span><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">version</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">dependency</span><span style="color: #F286C4">&gt;</span></span></code></pre></div>



<p style="font-size:16px">Hoặc muốn sử dụng các version khác thì anh em có thể truy cập vào 👉 <a href="https://mvnrepository.com/artifact/com.google.inject/guice">đây</a> 👈. Cứ version nào nhiều người sử dụng mà &#8220;phang&#8221; thôi =))). </p>



<h2 id="3-vi-du-co-ban-ve-dependency-injection-voi-google-guice" class="wp-block-heading" style="font-size:30px"><strong>3. Ví dụ cơ bản về Dependency Injection với Google Guice</strong></h2>



<p style="font-size:16px">Để sử dụng Guice cần nhớ 2 thông tin quan trọng sau:</p>



<ul class="wp-block-list">
<li style="font-size:16px">Nói với Guice cái gì cần được inject với annotation&nbsp;<strong>@Inject</strong>.</li>



<li style="font-size:16px">Nói với Guice cách inject mô-đun:&nbsp;implement&nbsp;<strong>Asbstract Module</strong>, bind các interface với các implementation mong muốn.</li>
</ul>



<p style="font-size:16px">Quay trở lại với ví dụ em gái Eimi Fukada trong bài <a href="http://blog.tomosia.com.vn/thong-nao-dependency-injection-bang-eimi-fukada/">trước</a> lần này tôi sẽ sử dụng Guice nha:</p>



<p style="font-size:16px">GuiceModule.java</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Java</span><span role="button" tabindex="0" data-code="package org.blogtms;

import com.google.inject.AbstractModule;

public class GuiceModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Outfit.class).to(Bikini.class);
        bind(Accessories.class).to(GucciAccessories.class);
        bind(HairStyle.class).to(KoreanHairStyle.class);
    }
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">package</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">org.blogtms</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> com.google.inject.AbstractModule;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">class</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">GuiceModule</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">extends</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">AbstractModule</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">    @</span><span style="color: #97E1F1; font-style: italic">Override</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">protected</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">configure</span><span style="color: #F6F6F4">() {</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">bind</span><span style="color: #F6F6F4">(Outfit.class).</span><span style="color: #62E884">to</span><span style="color: #F6F6F4">(Bikini.class);</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">bind</span><span style="color: #F6F6F4">(Accessories.class).</span><span style="color: #62E884">to</span><span style="color: #F6F6F4">(GucciAccessories.class);</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">bind</span><span style="color: #F6F6F4">(HairStyle.class).</span><span style="color: #62E884">to</span><span style="color: #F6F6F4">(KoreanHairStyle.class);</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p style="font-size:16px">Girl.java thêm @Inject</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Java</span><span role="button" tabindex="0" data-code="package org.blogtms;

import com.google.inject.Inject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

//@Component
public class Girl {

    @Autowired
    Outfit outfit;

    @Autowired
    Accessories accessories;

    @Autowired
    HairStyle hairStyle;

    @Inject
    public Girl(Outfit outfit, Accessories accessories, HairStyle hairStyle) {
        this.outfit = outfit;
        this.accessories = accessories;
        this.hairStyle = hairStyle;
    }
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">package</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">org.blogtms</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> com.google.inject.Inject;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> org.springframework.beans.factory.annotation.Autowired;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> org.springframework.stereotype.Component;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">//@Component</span></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">class</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">Girl</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    @</span><span style="color: #97E1F1; font-style: italic">Autowired</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1; font-style: italic">Outfit</span><span style="color: #F6F6F4"> outfit;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    @</span><span style="color: #97E1F1; font-style: italic">Autowired</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1; font-style: italic">Accessories</span><span style="color: #F6F6F4"> accessories;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    @</span><span style="color: #97E1F1; font-style: italic">Autowired</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1; font-style: italic">HairStyle</span><span style="color: #F6F6F4"> hairStyle;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    @</span><span style="color: #97E1F1; font-style: italic">Inject</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Girl</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">Outfit</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">outfit</span><span style="color: #F6F6F4">, </span><span style="color: #97E1F1; font-style: italic">Accessories</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">accessories</span><span style="color: #F6F6F4">, </span><span style="color: #97E1F1; font-style: italic">HairStyle</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">hairStyle</span><span style="color: #F6F6F4">) {</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #BF9EEE; font-style: italic">this</span><span style="color: #F6F6F4">.outfit </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> outfit;</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #BF9EEE; font-style: italic">this</span><span style="color: #F6F6F4">.accessories </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> accessories;</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #BF9EEE; font-style: italic">this</span><span style="color: #F6F6F4">.hairStyle </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> hairStyle;</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p style="font-size:16px">Main.java</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Java</span><span role="button" tabindex="0" data-code="package org.blogtms;

import com.google.inject.Guice;
import com.google.inject.Injector;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

//@SpringBootApplication
public class Main {
    public static void main(String[] args) {
//        ApplicationContext context = SpringApplication.run(Main.class, args);
//
//        Girl girl = context.getBean(Girl.class);

        Injector injector = Guice.createInjector(new GuiceModule());

        Girl girl = injector.getInstance(Girl.class);
    }
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">package</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">org.blogtms</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> com.google.inject.Guice;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> com.google.inject.Injector;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> org.springframework.boot.SpringApplication;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> org.springframework.boot.autoconfigure.SpringBootApplication;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> org.springframework.context.ApplicationContext;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">//@SpringBootApplication</span></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">class</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">Main</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">static</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">main</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">String</span><span style="color: #F6F6F4">[] </span><span style="color: #FFB86C; font-style: italic">args</span><span style="color: #F6F6F4">) {</span></span>
<span class="line"><span style="color: #7B7F8B">//        ApplicationContext context = SpringApplication.run(Main.class, args);</span></span>
<span class="line"><span style="color: #7B7F8B">//</span></span>
<span class="line"><span style="color: #7B7F8B">//        Girl girl = context.getBean(Girl.class);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E1F1; font-style: italic">Injector</span><span style="color: #F6F6F4"> injector </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> Guice.</span><span style="color: #62E884">createInjector</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">GuiceModule</span><span style="color: #F6F6F4">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E1F1; font-style: italic">Girl</span><span style="color: #F6F6F4"> girl </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> injector.</span><span style="color: #62E884">getInstance</span><span style="color: #F6F6F4">(Girl.class);</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p style="font-size:16px">Thế là xong rồi =))) </p>



<p style="font-size:16px">Trong ví dụ trên, chúng ta thấy một số phần thay đổi so với ví dụ ở bài trước:</p>



<ul class="wp-block-list">
<li style="font-size:16px">Tạo một class extends từ&nbsp;<strong>AbstractModule</strong>, lớp này được sử dụng để định nghĩa cách mà một class/ interface sẽ được inject bởi một implement cụ thể nào. Trong ví dụ này, <em>Outfit</em> sẽ được inject bởi implement&nbsp;<em>Bikini</em>.</li>



<li style="font-size:16px">Lớp <em>Girl</em> có dependency với&nbsp;<em>Outfit</em>. Trong ví dụ này, chúng ta sử dụng&nbsp;@Inject tại hàm xây dựng (constructor) để inject đối tượng&nbsp;<em>Outfit</em>.</li>



<li style="font-size:16px">Khởi tạo Guice Injector với config.</li>



<li style="font-size:16px">Lấy thể hiện đối tượng với các dependency để sử dụng.</li>
</ul>



<h2 id="4-scope-trong-google-guice" class="wp-block-heading" style="font-size:30px"><strong>4. Scope trong&nbsp;Google Guice</strong></h2>



<p style="font-size:16px">Theo mặc định, Guice trả về một instance mới mỗi lần nó cần cung cấp một giá trị. Hành vi này có thể cấu hình thông qua phạm vi (<a href="https://github.com/google/guice/wiki/Scopes">scope</a>). Scope cho phép chúng ta tái sử dụng instance.</p>



<p style="font-size:16px">Các loại Scope được hỗ trợ bởi&nbsp;Google Guice:</p>



<ul class="wp-block-list">
<li style="font-size:16px"><strong>@Singleton</strong>&nbsp;: một instance duy nhất được sử dụng trong toàn bộ ứng dụng.</li>



<li style="font-size:16px"><strong>@SessionScoped</strong>&nbsp;: mỗi session sẽ có một instance khác nhau.</li>



<li style="font-size:16px"><strong>@RequestScoped</strong>&nbsp;: mỗi request sẽ có một instance khác nhau.</li>
</ul>



<p style="font-size:16px">Trên đây là giới thiệu cơ bản về Google Guice.&nbsp;Nó cung cấp một cách tiếp cận mới cho&nbsp;<a href="http://blog.tomosia.com.vn/thong-nao-dependency-injection-bang-eimi-fukada/"><strong>Dependency Injection</strong></a>, tận dụng thế mạnh của&nbsp;<strong>Annotation</strong>&nbsp;và&nbsp;<strong>Generic</strong>&nbsp;để giúp chúng ta dễ dàng hơn trong việc quản lý và sử dụng các Dependency, cũng như dễ dàng phát triển các ứng dụng dạng module.</p>



<p style="font-size:16px"><strong>Tài liệu tham khảo:</strong></p>



<ul class="wp-block-list">
<li style="font-size:16px"><a href="https://github.com/google/guice">https://github.com/google/guice</a></li>



<li style="font-size:16px"><a href="https://www.tutorialspoint.com/guice/index.htm">https://www.tutorialspoint.com/guice/index.htm</a></li>
</ul>



<p style="font-size:16px">Cảm ơn anh em đã theo dõi bài viết 🙋‍♂️. Vẫn như mọi khi, <a href="https://github.com/chienhnc/di">đây là source code</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/dependency-injection-di-framework-google-guice/">Dependency Injection (DI) framework &#8211; Google Guice</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/dependency-injection-di-framework-google-guice/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
