Spring @Несколько объектов Autowire

Мне нравится код, который визуально легко читается (субъективный, я знаю). Есть ли способ в Spring взять первый вид кода

@Autowired
private O1 o1
@Autowired
private O2 o2
@Autowired
private O3 o3

И сделайте что-нибудь вроде этого:

@Autowired
private O1 o1
private O2 o2
private O3 o3
@Endautowire

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

5 ответов

Возможно только с препроцессором для java-источников. Но, по моему мнению, этого не стоит.


Вы можете использовать конструктор для ввода всех объектов с одной аннотацией:

private O1 o1;
private O2 o2;
private O3 o3;
@Autowired
public ClassA(O1 o1, O2 o2, O3 o3) {
 this.o1 = o1;
 this.o2 = o2;
 this.o3 = o3;
}


Были случаи, когда люди использовали для объявления переменной типа,

int i1, i2, i3;

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

Подойдя к вашему вопросу, как и mrembisz сказал, что это должно произойти, должно произойти в исходных файлах. Другими словами, компилятор java должен измениться для обработки такого сценария.

Переходя к читаемости, ваше решение будет только увеличить код беспорядок и уменьшить читаемость, предположим, что у меня есть 10 beans впрыскивается, каждый раз, когда мне нужно, чтобы увидеть выше и ниже код, чтобы знать, если он автоматически подключен или нет.

Итак, я сомневаюсь, что стоит потратить время или нет.


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


Не так, как вы хотите с аннотациями.

Вы можете создать тип uber, который принимает эти три, и добавьте этот тип здесь. Id делает это только в том случае, если вы оказываетесь в этой ситуации много времени или действительно отражаете концепцию в своем приложении.

licensed under cc by-sa 3.0 with attribution.