Стоит ли использовать AOP в приложении Spring-boot? - PullRequest
0 голосов
/ 16 октября 2019

Несколько дней назад я опубликовал этот вопрос , спрашивающий, существует ли более новый подход к Spring AOP и mockito.

Хотя я понимаю, как использовать AOP, мне все еще не хватаетего возвращаемое значение. Все это показало мне, что это не очень популярно - по крайней мере, не так много недавних сообщений.

Если я закомментирую аннотации @Aspect и @Configuration в моем классе LoggingAspect,отрисовка не-aop, все мои тесты зеленые. Если я включу его снова, я начну получать загрузку исключений NullPointerException и множество других ошибок в моих ложных тестовых классах.

Интересно, стоит ли это хлопот.

РЕДАКТИРОВАТЬ добавив больше деталей из моей конкретной реализации.

Контроллер:

@RestController
public class EndpointController {

    private EndpointService endpointService;

    @Autowired    
    public EndpointController(EndpointService endpointService) {
        this.endpointService = endpointService;
    }

    @PostMapping(path = "/endpoint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    private @ResponseBody EndpointResponse doSomething(//... //, @RequestBody SomeObject someObject) throws Exception {
        return endpointService.doSomething(someObject);
    }
}

В моем тестовом классе у меня есть:

@RunWith(SpringRunner.class)
public class EndpointControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void shouldBeSuccessfulAccessingTheEndpoint() throws Exception {
        SomeObject someObject = new SomeObject(// values //);

        ObjectMapper mapper = new ObjectMapper();
        String payload = mapper.writeValueAsString(someObject);

        mockMvc.perform(post("/endpoint").contentType(MediaType.APPLICTION_JSON).content(payload)).andExpect(status().isOK));
    }
}

Сбой и выдаетИсключение нулевого указателя. При отладке endpointService всегда равно нулю.

Ответы [ 2 ]

1 голос
/ 16 октября 2019

АОП действует как всегда. Он используется для транзакций, ведения журнала, метрик и т. Д.

Я думаю, что был период, когда он мог быть чрезмерно использован в качестве декораторов.

Производство и тестирование - это разные вопросы.

Если вы проводите модульное тестирование класса, это говорит о том, что вы не тестируете аспекты. Вы можете сделать эти аспекты условными, основываясь на профиле.

Если правильная работа вашего объекта зависит от аспекта, поскольку он изменяет входные данные, возможно, вам следует переосмыслить.

1 голос
/ 16 октября 2019

AOP отлично подходит для сквозных задач :

  • Ведение журнала (мы используем его для доступа и ведения журнала производительности)
  • Проверка (например, используетсяBean Validation, JSR-380)
  • Транзакционные области (встроены в такие структуры, как JEE и Spring)
  • Проверки безопасности (например, Shiro)
  • и многие другие.

Его можно использовать для других целей, таких как расширение / перенос существующей функциональности, хотя это определенно не то, что я бы рекомендовал, и, к счастью, никогда не стало популярным, как кажется.

...