2016-10-24 2 views
-1

Javaで循環依存を回避するにはどうすればよいですか? 私はwebserviceを使用していますが、私はどのようにクラスを注入するのかわかりません。私はクラスを注入するためのMyApplicationBinderについて聞いたが、私はそれを使用する方法を知らない?私のプロジェクト構造でjax-rs2と注射の循環依存を避けるにはどうしたらいいですか?

は次のようである。この

1.Controller

-UserController

-TeamController

-TournamentController

private UserService userService = new UserServiceImpl(); 
//for accessing Service class I used this way how to inject this class in controller 

2.Service

-UserServiceImpl

-TeamServiceImpl -TournamentServiceImpl

private UserDAO userDAO = new UserDAOImpl(); 
//for accessing DAO class I used this way how to inject this class in service 

そしてTeamServiceImplクラス内の1つのより多くの問題が、私はTournamentServiceImlクラスのリソースを必要とTournamentServiceImlclassで同時に で私は(TeamServiceImplクラスのリソースを必要とします私はメソッドを呼び出す必要があることを意味します)。明らかに循環依存を引き起こす可能性があります。このような状況を回避する方法

3.DAO

-UserDAOImpl

-TeamDAOImpl

-TournamentDAOImpl

これは

MyApplication.java

@ApplicationPath("/api") 
public class MyApplication extends ResourceConfig 
{ 
    public MyApplication() 
    { 
     register(JacksonJsonProvider.class); 
     register(MultiPartFeature.class); 
     registerClasses(UserController.class); 
     registerClasses(TeamController.class); 
     registerClasses(TournamentController.class); 
     registerClasses(FileStorageController.class); 
     register(new MyApplicationBinder()); 
    } 

} 

私ResourceConfigのクラスですMyApplicationBinder.java

public class MyApplicationBinder extends AbstractBinder { 
    @Override 
    protected void configure() { 
    } 
} 

public class TeamServiceImpl implements TeamService 
{ 

    private TeamDAO teamDAO = new TeamDAOImpl(); 
    private UserService userService = new UserServiceImpl(); //for accesing UserService 
    private FileStorageService fileStorageService = new FileStorageServiceImpl();////for accesing FileService 
    private TournamentService userService = new TournamentServiceImpl();//for accesing TournamentService 
.......... 

} 

public class TournamentServiceImpl implements TournamentService 
{ 

    private TournamentDAO tournamentDAO = new TournamentDAOImpl(); 
    private UserService userService = new UserServiceImpl(); 
    private TeamService teamService = new TeamServiceImpl(); 
    //cant get this TeamService when we call it occurs circular dependency 
    private FileStorageService fileStorageService = new FileStorageServiceImpl(); 

.......... 

} 

私は今、私はあなたがControllerLayer、ServiceLayer、DAOLayerでクラスを注入するために私の状況

1.Howを理解すると思うこのproject.Iで立ち往生しています。この技術の新しい午前私を助けてください?

2.この状況で循環依存を避けるにはどうすればよいですか?

3.Howコンストラクタインジェクションを使用するには?一部の人々は私にこのことについて、適切な指導をしてください。..

答えて

0

を2.How避けるために、それを

を使用する方法、thatsの良い方法を教えてくれました循環依存?

複数のプロジェクトで使用されているコード(circulad依存関係を原因とする)を抽出し、他のプロジェクトが依存できる新しいプロジェクトに抽出します。これを可能にするために、追加のインタフェース(これも新しいプロジェクトに移動します)を組み込むことができます。

関連する問題