17eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee/** 27eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * Copyright (C) 2006 Google Inc. 37eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * 47eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * Licensed under the Apache License, Version 2.0 (the "License"); 57eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * you may not use this file except in compliance with the License. 67eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * You may obtain a copy of the License at 77eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * 87eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * http://www.apache.org/licenses/LICENSE-2.0 97eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * 107eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * Unless required by applicable law or agreed to in writing, software 117eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * distributed under the License is distributed on an "AS IS" BASIS, 127eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * See the License for the specific language governing permissions and 147eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * limitations under the License. 157eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee */ 167eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 177eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepackage com.google.inject.example; 187eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 197eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleeimport static junit.framework.Assert.assertTrue; 207eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 217eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee/** 227eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee * @author crazybob@google.com (Bob Lee) 237eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee */ 247eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic class ClientServiceWithDependencyInjection { 257eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 267eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee// 62 lines 277eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 287eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic interface Service { 297eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee void go(); 307eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 317eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 327eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic static class ServiceImpl implements ClientServiceWithDependencyInjection.Service { 337eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public void go() { 347eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee // ... 357eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 367eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 377eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 387eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic static class ServiceFactory { 397eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 407eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee private ServiceFactory() {} 417eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 427eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee private static final Service service = new ServiceImpl(); 437eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 447eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public static Service getInstance() { 457eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee return service; 467eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 477eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 487eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 497eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic static class Client { 507eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 517eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee private final Service service; 527eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 537eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public Client(Service service) { 547eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee this.service = service; 557eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 567eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 577eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public void go() { 587eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee service.go(); 597eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 607eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 617eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 627eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic static class ClientFactory { 637eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 647eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee private ClientFactory() {} 657eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 667eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public static Client getInstance() { 677eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee Service service = ServiceFactory.getInstance(); 687eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee return new Client(service); 697eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 707eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 717eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 727eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic void testClient() { 737eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee MockService mock = new MockService(); 747eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee Client client = new Client(mock); 757eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee client.go(); 767eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee assertTrue(mock.isGone()); 777eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 787eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 797eb9f4449d2e2c70e012bcef508c2346861d30d0crazybobleepublic static class MockService implements Service { 807eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 817eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee private boolean gone = false; 827eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 837eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public void go() { 847eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee gone = true; 857eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 867eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 877eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public boolean isGone() { 887eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee return gone; 897eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 907eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 917eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee 927eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee public static void main(String[] args) { 937eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee new ClientServiceWithDependencyInjection().testClient(); 947eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee } 957eb9f4449d2e2c70e012bcef508c2346861d30d0crazyboblee} 96