Spring MVC - как динамически загружать / вводить сервис - PullRequest
0 голосов
/ 11 февраля 2019

Для моего приложения Spring MVC у меня будет контроллер, который будет обрабатывать все запросы из путей, скажем service/*.URL-адреса могут быть такими, как /service/item/getitems, /service/property/getproperties

Контроллер должен загружать класс обслуживания во время выполнения на основе указанного URL-адреса.Например, если url равен /service/item/getitems, контроллер должен загрузить itemService и иметь возможность вызова itemService.getItems();, если url /service/property/getproperties, он должен загрузить propertyService и вызвать propertyService.getProperties()

Как я могу реализовать динамическую загрузку сервисов из контроллера?

1 Ответ

0 голосов
/ 11 февраля 2019

application.yml должно выглядеть следующим образом

server:
  port: 8090
  servlet:
    context-path: /service

ApiController.java должно выглядеть следующим образом

public abstract class ApiController<Id extends Serializable, E> {

    /**
     * Collection for service classes.
     *
     * @see AbstractService
     */
    private final AbstractService<Id, E> service;
    @Autowired
    private ApplicationContext appContext;

 public ApiController(AbstractService<Id, E> service) {
        this.service = service;
    }
    }

AbstractService.java должно выглядеть следующим образом

public interface AbstractService<Id extends Serializable, E> {

    /**
     *
     * @return
     */
    public default Class<E> getEntityClass() {
        return (Class<E>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];

    }

ItemController.java должно выглядеть следующим образом

@RestController
@RequestMapping(value = "/item")
public class ItemController extends ApiController<Integer, Item> {


private final ItemService itemService;

@Autowired
    public ItemController(ItemService service) {
    super(service);
    this.service = service;
    }
}

PropertyController.java должно выглядеть следующим образом

@RestController
@RequestMapping(value = "/property")
public class PropertyController extends ApiController<Integer, Property> {


private final PropertyService propertyService;

@Autowired
    public PropertyController(propertyService service) {
    super(service);
    this.service = service;
    }
}

Это то, что вам нужно сделать, чтобы получить желаемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...