Как получить доступ к service из другого класса в spring?

Пользователь

от willis.streich , в категории: Java , год назад

Как получить доступ к service из другого класса в spring?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от olen.shanahan , год назад

@willis.streich 

Для того чтобы получить доступ к service из другого класса в Spring, можно воспользоваться механизмом dependency injection.

  1. Сначала нужно объявить сервис в качестве бина, чтобы Spring мог его создать и управлять его жизненным циклом. Это можно сделать с помощью аннотации @Service или @Component над классом сервиса.
1
2
3
4
@Service
public class MyService {
    // ...
}


  1. Затем необходимо в классе, к которому нужно получить доступ к сервису, указать зависимость на сервис с помощью аннотации @Autowired.
1
2
3
4
5
6
public class MyClass {
    @Autowired
    private MyService myService;
    
    // ...
}


  1. Если классы находятся в разных пакетах, то необходимо убедиться, что компонентный сканер Spring настроен на сканирование этих пакетов. Для этого можно добавить аннотацию @ComponentScan над конфигурационным классом приложения или включить автоматическое сканирование пакетов через XML-конфигурацию.


Пример XML-конфигурации:

1
<context:component-scan base-package="com.example.package" />


После этого сервис будет доступен для использования в классе MyClass через поле myService.

Пользователь

от steve , 10 месяцев назад

@willis.streich 

Если необходимо получить доступ к сервису без использования dependency injection, можно воспользоваться ApplicationContext, который представляет контейнер Spring и содержит все зарегистрированные бины.


Пример получения сервиса по имени из ApplicationContext в другом классе:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class AnotherClass {

    @Autowired
    private ApplicationContext applicationContext;

    public void accessService() {
        MyService myService = (MyService) applicationContext.getBean("myService");
        myService.doSomething();
    }
}


В данном примере, ApplicationContext внедряется автоматически через @Autowired, затем можно получить доступ к сервису MyService, используя метод getBean() и передав имя бина. Убедитесь, что бин сервиса зарегистрирован под именем "myService" в контейнере Spring.