2016-10-11 4 views
0

У меня есть три класса (класс , Класс Б, Класс С) в моем приложении.метода экземпляра с помощью autowired фасоли

Я начинаю весну. Попытка ввести фасоль класса B для использования в классе A с использованием @Autowired аннотация. Я хочу использовать поведение синглтонных весенних бобов, так что будет только экземпляр класса B независимо от того, сколько раз он вызывается из класса A.

Там есть метод класса B, который я хочу, чтобы позвонить из класса с помощью этого компонента класса B. Как я могу это сделать?

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

+1

Spring singleton! = Java singleton –

+0

Показать, что вы сделали. Включите конфигурационные файлы Spring (если вы используете конфигурацию XML) или конфигурацию Java. –

ответ

2

Spring одноточечно определяется как «один контейнер на боб»

Если вы хотите одноточечно на весенний контейнер ниже, что должно быть сделано в вашем определении боба

<bean id="myBean" class="MyBean"/> 

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

<bean id="myBean" class="MyBean" factory-method="getInstance"></bean> 
0

Каждый класс, помеченный как @Component, @Service, @Repository т.д. синглтон, но только внутри пружинного контейнера. Так что лучше сказать, что они находятся в single scope.

@Component 
public class MyBean { 
    [...] 
} 

Другой вариант, чтобы определить компонент в одноэлементных рамках, чтобы пометить метод как @Bean. Возвращаемый тип будет храниться в кэше, так что вы будете всегда использовать один и тот же экземпляр, если вы вызываете этот метод:

@Service 
public class MyService { 

    [...] 

    @Bean 
    @Scope("singleton") 
    public MyOtherBean myOtherBean() { // singleton factory method 
     return [...]; 
    } 

} 

Но @Bean следует использовать только в @Configuration зернах. Внутри фасоли @Service вы можете просто ввести необходимый компонент (@Autowired).

Смежные вопросы