Поздно, но я надеюсь, что это кому-то поможет.
У меня есть JAX RS, определенный следующим образом:
@Path("/examplepath")
@RequestScoped //this make the diference
public class ExampleResource {
Затем, в моем коде, наконец, я могу ввести:
@Inject
SomeManagedBean bean;
В моем случае SomeManagedBean
является компонентом ApplicationScoped.
Надеюсь, это поможет кому угодно.
Обращаем ваше внимание на то, что приложение Spring Boot во время запуска стремится разрешить дерево зависимостей. Это означает обнаружение и создание экземпляров Beans, которые определяет приложение, и это классы, аннотированные @Service, @Repository и т. Д.
Это означает, что вызывается конструктор по умолчанию (или помеченный @Autowire) для всех bean-компонентов, и после того, как все bean-компоненты были построены, приложение начинает работать.
Когда аннотация @Bean вступает в игру, это если у вас есть бин, который не знает значений его параметров конструктора во время компиляции (например, если вы хотите подключиться к метке времени «с начала»): тогда вы должны определить класс с аннотацией @Configuration и открывающий в нем метод @Bean, который будет возвращать ваш bean-компонент и иметь параметры, которые являются зависимостями bean-компонентов. В нем вы вызываете конструктор bean и возвращаете bean.
Теперь, если вы хотите, чтобы определенный метод некоторого класса вызывался после разрешения приложения, вы можете реализовать интерфейс CommandLineRunner или аннотировать метод с помощью @PostConstruct.
Некоторые полезные ссылки / ссылки:
При создании @Bean
, добавление репозитория в параметры bean-компонента достаточно, чтобы связать репо в bean-компоненте. Это работает почти так же, как добавление аннотации @Autowired
внутри класса, аннотированного как @Component
, или что-то подобное.
Spring работает в основном с интерфейсом, так как это проще для проводки по сравнению с классами проводки.