powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Interface FactoryBean
7 сообщений из 7, страница 1 из 1
Interface FactoryBean
    #39094094
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу понять что за интерфейс в спринге FactoryBean. Насколько понимаю, это один из основополагающих интерфейсов.

зашёл в доку:

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/FactoryBean.html Interface to be implemented by objects used within a BeanFactory which are themselves factories. If a bean implements this interface, it is used as a factory for an object to expose, not directly as a bean instance that will be exposed itself.
NB: A bean that implements this interface cannot be used as a normal bean. A FactoryBean is defined in a bean style, but the object exposed for bean references (getObject() is always the object that it creates.

FactoryBeans can support singletons and prototypes, and can either create objects lazily on demand or eagerly on startup. The SmartFactoryBean interface allows for exposing more fine-grained behavioral metadata.

This interface is heavily used within the framework itself, for example for the AOP ProxyFactoryBean or the JndiObjectFactoryBean. It can be used for application components as well; however, this is not common outside of infrastructure code.

NOTE: FactoryBean objects participate in the containing BeanFactory's synchronization of bean creation. There is usually no need for internal synchronization other than for purposes of lazy initialization within the FactoryBean itself (or the like).


Пытаюсь перевести:

Интерфейс для имплементации объектами используемыми в рамках BeanFactory, которые сами по себе фабрики...

Вот тут я подзавис. не могу понять, что это значит.
...
Рейтинг: 0 / 0
Interface FactoryBean
    #39094121
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S.

что такое BeanFactory я ферштейн.
...
Рейтинг: 0 / 0
Interface FactoryBean
    #39094250
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Надо просто определится с терминологией и повторить сложносоставные существительные в английском

Bean - класс\объект под управлением контейнера (Spring)
Factory - класс для создания объектов
BeanFactory - это "фабрика бобов" - то что является основным производителем "бинов" в Spring
FactoryBean - это Bean, который при этом является ещё и фабрикой для создания других "бинов"

BeanFactory - то что реализует Spring для создания объектов
FactoryBean - то что реализует разработчик для создания объектов в рамках Spring
...
Рейтинг: 0 / 0
Interface FactoryBean
    #39094252
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FactoryBean это рабочие лошадки внутри спринг контейнера. Контейнер при поиске (lookup) отдает не сам FactoryBean, а результат вызова factoryBean.getObject().

Например есть у тебя DataSource в JNDI, чтобы его получить ты можешь его получать так.

Код: xml
1.
2.
3.
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/>
</bean>

вызов applicationContext.getBean("dataSource") даст тебе не объект типа JndiObjectFactoryBean, а DataSource.
Чтобы получить именно ...FactoryBean нужно использовать амперсант applicationContext.getBean("&dataSource").

Например MethodInvokingFactoryBean вызов метода. Это может быть статический метода класса, или вызов метода экземпляра объекта. Тут зависит как MethodInvokingFactoryBean сконфигурируешь.
Код: xml
1.
2.
3.
4.
<bean id="sysProps" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
   <property name="targetClass"><value>java.lang.System</value></property>
   <property name="targetMethod"><value>getProperties</value></property>
 </bean>

FactoryBeans в спринге дофига, и за пределами контейнера они обычно не нужны.
...
Рейтинг: 0 / 0
Interface FactoryBean
    #39094301
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно понял.

Вот такой код даже наисал

Код: java
1.
2.
3.
4.
5.
public class MyInjectionClass {
    String name;
    Integer age;
    //get and set methods
}


and

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Component
public class MyComponent {

    @Autowired
    MyInjectionClass myInjectionClass; 

    public MyInjectionClass getMyInjectionClass() {
        return myInjectionClass;
    }
}


and following cutom FactoryBean:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
@Component
public class MyInjectionClassFactoryBean implements FactoryBean<MyInjectionClass> {
    @Override
    public MyInjectionClass getObject() throws Exception {
        MyInjectionClass myInjectionClass = new MyInjectionClass();
        myInjectionClass.setName("name");
        myInjectionClass.setAge(12);
        return myInjectionClass;
    }

    @Override
    public Class<?> getObjectType() {
        return MyInjectionClass.class;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}




Вот такой main:

Код: java
1.
2.
MyComponent bean = context.getBean(MyComponent.class);
System.out.println(bean.getMyInjectionClass().getAge());



даже 12 получил)

я не совсем понял зачем в спринге куча встроенных FactoryBean?

чем просто вызов new на объекте не прокатывает?
...
Рейтинг: 0 / 0
Interface FactoryBean
    #39094306
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerя не совсем понял зачем в спринге куча встроенных FactoryBean?
чем просто вызов new на объекте не прокатывает?
Так почитай их список в JavaDoc. Большенство из них существует для инетеграции со сторонним API. Когда бин из этого API нужно создавать только через этот самый API, а не через конструктор.
...
Рейтинг: 0 / 0
Interface FactoryBean
    #39094353
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Спасибо
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Interface FactoryBean
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]