1

私は次のリソースクラスを持っています

@Path("/helloworld")
public class HelloWorldResource {
@Inject
private UserAuthorizationRepository userRepository;

@GET
public Response sayHello(@Context UriInfo uriInfo) 

以下は UserAuthorizationRepository の私の実装です

public class UserAuthorizationRepositoryImpl implements UserAuthorizationRepository { 
@Inject
private MyUserIdToUserNameTable userIdToUserNameTable;
public String getUserName(Long userId) {
    userNameToUserIdTable.getUserName(userId)
}

そして、次のバインダーを ResourceConfig に登録しました

public class RepositoryBinder extends AbstractBinder {
@Override
protected void configure() {
    bind(new UserAuthorizationRepositoryImpl()).to(UserAuthorizationRepository.class);
    bind(new MyUserIdToUserNameTable()).to(UserIdToUserNameTable.class);
}

この後、リソース クラスの userRepository は正しくバインドされますが、UserAuthorizationRepositoryImpl の userIdToUserNameTable は null です。

誰も理由を知っていますか?前もって感謝します!

4

1 に答える 1

0

1 つには、hk2/Jersey に作成させるのではなく、自分で UserAuthorizationRepositoryImpl を作成しているようです。代わりに次のことを試してみてください。

public class RepositoryBinder extends AbstractBinder {
@Override
protected void configure() {
    bind(UserAuthorizationRepositoryImpl.class).to(UserAuthorizationRepository.class);
    bind(MyUserIdToUserNameTable.class).to(UserIdToUserNameTable.class);
}

これにより、hk2/Jersey がクラスを作成し、適切に注入できるようになります。

于 2014-09-04T19:33:26.113 に答える