Свяжите петлю на массиве в контроллере с кнопкой на лезвии

Сначала просто ответьте на комментарий в ответе accept.

«Что делает привязка? Что делать, если у меня есть интерфейс и реализация?»

blockquote>

Он просто читает bind( implementation ).to( contract ). Вы можете использовать альтернативную цепочку .in( scope ). Область по умолчанию PerLookup. Поэтому, если вам нужен синглтон, вы можете

bind( implementation ).to( contract ).in( Singleton.class );

Также имеется RequestScoped

Кроме того, вместо bind(Class).to(Class) вы также можете bind(Instance).to(Class), который будет быть автоматически одиночным.


Добавление к принятому ответу

Для тех, кто пытается выяснить, как зарегистрировать реализацию AbstractBinder в ваш web.xml (т. е. вы не используете ResourceConfig), похоже, связывание не будет обнаружено через сканирование пакетов, то есть

org.glassfish.jersey.servlet.ServletContainer

    jersey.config.server.provider.packages
    
        your.packages.to.scan
    

Или это либо


    jersey.config.server.provider.classnames
    
        com.foo.YourBinderImpl
    

Чтобы заставить его работать, мне пришлось реализовать Feature :

import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.Provider;

@Provider
public class Hk2Feature implements Feature {

    @Override
    public boolean configure(FeatureContext context) {
        context.register(new AppBinder());
        return true;
    }
}

Аннотации @Provider должны позволять выбирать Feature путем сканирования пакета. Или без сканирования пакетов вы можете явно зарегистрировать Feature в web.xml


    Jersey Web Application
    org.glassfish.jersey.servlet.ServletContainer
    
        jersey.config.server.provider.classnames
        
            com.foo.Hk2Feature
        
    
    ...
    1


См. Также:

и для общей информации из документации Джерси


UPDATE

Заводы

от базовой привязки в принятом ответе, у вас также есть заводы, где вы можете иметь более сложную логику создания, а также иметь доступ к информации контекста запроса. Например

public class MyServiceFactory implements Factory {
    @Context
    private HttpHeaders headers;

    @Override
    public MyService provide() {
        return new MyService(headers.getHeaderString("X-Header"));
    }

    @Override
    public void dispose(MyService service) { /* noop */ }
}

register(new AbstractBinder() {
    @Override
    public void configure() {
        bindFactory(MyServiceFactory.class).to(MyService.class)
                .in(RequestScoped.class);
    }
});

Затем вы можете ввести MyService в свой класс ресурсов.

0
задан Tom N. 15 January 2019 в 17:04
поделиться