2013-11-28 4 views
3

Когда я определяю боб, как так:Почему объявить метод как статический весной?

<bean id="testBean2" class="test"> 
</bean> 

<bean id="testBean" factory-bean="testBean2" factory-method="getter"/> 

class test { 
    public void getter(){}; 
} 

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

Однако, если я определяю фасоль так:

<bean id="testBean" class="test" factory-method="getter"> 
</bean> 

я получаю сообщение об ошибке Spring, требующее боб быть статическим, так что мне нужно, чтобы изменить его на:

class test { 
     public static void getter(){}; 
    } 

Почему это происходящий ? Должны ли обе реализации не быть статическими?

+1

Это не боб, который должен быть статичным, но метод. Может быть, хорошо перефразировать название вашего вопроса. – mwhs

ответ

1

Вы пытаетесь создать статический завод (со связанным методом) для создания вашего компонента.

С кодом, который выглядит примерно так:

public class BeanClass { 

    private static BeanClass instance = new BeanClass(); 

    private BeanClass(){ 
    }   

    public static BeanClass getter(){ 
     return instance; 
    } 
} 

Вашего контекст весна может выглядеть примерно так:

<bean id="beanClassInstance" class="BeanClass" factory-method="getter"/> 

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

0

В первом случае вы сообщаете Spring использовать конкретный компонент (пример testBean2), чтобы предоставить экземпляр другого компонента (testBean).

Во втором случае вы говорите, что класс фасоли testBean имеет статический заводский метод в своем классе test для предоставления экземпляров bean.


Обратите внимание, что «завод боб» это специальный термин, относящийся к фасоли, способной производить другие бобовые. Обычно эти компоненты представлены в виде FactoryBean.

0

Поскольку вы объявляете метод фабрики getter быть в самом компоненте testBean что вы свистеть для создания экземпляра с помощью завода-метода

посмотреть здесь:

<bean id="testBean" class="test" factory-method="getter"> 

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

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

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