Как пружинный впрыск работает с @Resource? - PullRequest
2 голосов
/ 21 мая 2011

Это вопрос для понимания внутренних пружин. Есть пара обходных путей, предложенных для самостоятельного введения боба весной, потому что @Autowired не работает. Вот несколько тем . Я хотел бы знать причину, почему и как технически самовнушение работает с аннотацией @Resource?


@Service(value = "someService")
public class UserService implements Service{
   @Resource(name = "someService")
   private Service self;
}

Будем благодарны за любые ссылки на исходный код Spring. Спасибо.

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

Из другой темы Я получил ответ, который выглядит довольно хорошо. В основном говорится, что Spring специально добавляет защитные проверки для обработки bean-компонентов @Autowired, но bean-компоненты @Resource обходят его, и, следовательно, он работает.

0 голосов
/ 21 мая 2011

Я не знаю, как именно Spring справляется с этим, но вот несколько вариантов (например, в спецификации CDI):

  • Незавершенные случаи. Когда бины создаются и помещаются в контекст, их статус устанавливается как «неполный», то есть их экземпляр существует, но их зависимости не внедряются. Таким образом, создаются первые компоненты, помещаются в контекст, а на следующем этапе вводятся их зависимости. Это делает приведенный выше случай тривиальным - контейнер сначала создает экземпляр, а затем для каждой точки внедрения получает нужный компонент из контекста - сам в этом случае

  • прокси. Прокси-сервер создается для каждого компонента, поэтому он содержит компоненты без фактического создания компонентов. Он создает прокси (по интерфейсу / конкретному классу), внедряет их друг в друга и передает прокси, когда это необходимо. Наконец, каждый прокси получает свой фактический компонент. Возможно, это не тот случай, описанный выше, потому что он используется CDI для обработки циклического конструктора инъекции.

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