上記のコードを、手動でDIを行うようにリファクタリングすると下記のようになる。public class VerySimpleStockTraderImpl implements IAutomatedStockTrader {    private IStockAnalysisService analysisService;    private IOnlineBrokerageService brokerageService;    public VerySimpleStockTraderImpl(            IStockAnalysisService analysisService,            IOnlineBrokerageService brokerageService) {        this.analysisService = analysisService;        this.brokerageService = brokerageService;    }    public void executeTrades() {        …    }}public class MyApplication {    public static void main(String[] args) {        IStockAnalysisService analysisService = new StockAnalysisServiceImpl();        IOnlineBrokerageService brokerageService = new NewYorkStockExchangeBrokerageServiceImpl();        IAutomatedStockTrader stockTrader = new VerySimpleStockTraderImpl(            analysisService,            brokerageService);        stockTrader.executeTrades();    }}この例では、MyApplication.main()が依存性の注入を行っており、VerySimpleStockTraderImpl自体は特定の実装に依存しなくなっている。なお、この実装ではコンストラクタ注入の手法が用いられている。
以下はDIを用いない場合の実装例である。public class VerySimpleStockTraderImpl implements IAutomatedStockTrader {    private IStockAnalysisService analysisService = new StockAnalysisServiceImpl();    private IOnlineBrokerageService brokerageService = new NewYorkStockExchangeBrokerageServiceImpl();    public void executeTrades() {        ….    }}public class MyApplication {    public static void main(String[] args) {        IAutomatedStockTrader stockTrader = new VerySimpleStockTraderImpl();        stockTrader.executeTrades();    }}VerySimpleStockTraderImplクラスでは、直接IStockAnalysisService, IOnlineBrokerageServiceインタフェースを実装したクラスのインスタンスを作成しており、これらの実装に深く依存してしまっている。
DIの例として、以下にJavaによるDIを用いない場合と手動でのDI、ならびにDIコンテナをイメージした自動でのDIのサンプルコードを示す。初めに、一連のサンプルで用いる各コンポーネントのインタフェースを示す。public interface IOnlineBrokerageService {    String[] getStockSymbols();    double getBidPrice(String stockSymbol);    double getAskPrice(String stockSymbol);    void putBuyOrder(String stockSymbol, int shares, double buyPrice);    void putSellOrder(String stockSymbol, int shares, double sellPrice);}public interface IStockAnalysisService {    double getEstimatedValue(String stockSymbol);}public interface IAutomatedStockTrader {    void executeTrades();}
依存性の注入（いそんせいのちゅうにゅう、英: Dependency injection）とは、コンポーネント間の依存関係をプログラムのソースコードから排除するために、外部の設定ファイルなどでオブジェクトを注入できるようにするソフトウェアパターンである。英語の頭文字からDIと略される。
XCuteのサポートは、マイクロラボの運営するXcuteユーザーフォーラムで行われており誰でも利用することができる。また、製品を購入しサポートに加入したユーザに対しては電子メールや電話などで開発者によるサポートを直接受けることができ、ソフトウェアバージョンアップにも無償で対応している。
EUの乗り入れ禁止解除を受け、2009年7月に「the Quantum Leap」という再建計画を発表した。また同時にロゴ、制服、機体塗装、尾翼のデザインなどが一新された。このデザインはアメリカの大手デザイン事務所ランドーアソシエイツによるものである。2010年11月23日に航空連合・スカイチームに加盟する契約を締結し、2014年3月5日に加盟した。それに合わせて、スカイチーム塗装をまとったB737-800（機体番号：PK-GMH）もお披露目されている。2012年3月13日に日本就航50周年を迎え、4月27日に東京国際空港へ乗り入れた2013年10月16日に山梨県と相互協力協定を締結。2014年3月30日からインドネシア - 日本路線とジャカルタ・デンパサール発着 国内線の一部で全日本空輸 (ANA) とコードシェアを開始した。2012年3月に中止した中部国際空港への乗り入れを、発着地をデンパサールからジャカルタに変更し2015年3月より再開する予定であったが、2015年に経営陣が変わりこれまでの路線拡大から路線見直しに経営方針が変わったため、再開が見送られることとなった。当初の主な理由として愛知県からの自動車関連企業などのインドネシア進出が急増した事が挙げられた 。2017年からは成田国際空港経由でロサンゼルス国際空港へ乗り入れを再開する計画であった。1997年までマニラ・ホノルル経由で乗り入れていたが、アジア通貨危機の影響で乗り入れを中止して以来20年ぶりの北米線となる予定であったが、他社とのコードシェアの活用や不採算路線の見直しなどの経営改革に着手した。そのため、自社による北米線の再就航は見送られた。2018年、スリウィジャヤ航空とコードシェア提携を始めた。2018年9月、日本航空と提携することとなり、2018年10月以降はJALとコードシェアを実施、当初は一部の路線が対象となる。JAL運航の成田～ロサンゼルス・ニューヨーク線も当初のコードシェアの対象となっており、それが自社による北米線の運航を見送った代替となる。その後順次対象路線の拡充が進められ、マイレージの提携も今後実施される予定。全日本空輸との提携も当面の間は継続され、1年後を目処にガルーダ・インドネシア航空はJAL・ANAとの中で日本での共同事業の相手を選択する見込み。