Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring, Prototype / 11 сообщений из 11, страница 1 из 1
02.01.2021, 23:28
    #40033116
colacoca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
Объясните, пожалуйста, почему при увеличении переменных film и year метод nextRelease не меняется.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
import com.epam.rd.autotasks.confbeans.video.Channel;
import com.epam.rd.autotasks.confbeans.video.Video;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;

import java.time.LocalDateTime;

import static java.util.stream.Collectors.toSet;

public class ChannelWithPhantomVideoStudioConfig {

    int film = 0;
    int year = 1999;

    @Bean
    public Channel channel (Video nextRelease) {

        Channel channel1 = new Channel();

        channel1.addVideo(nextRelease);
        film++;
        year++;
        channel1.addVideo(nextRelease);
        film++;
        year++;
        channel1.addVideo(nextRelease);
        System.out.println(channel1.videos()
                .collect(toSet()));

        return channel1;
    }

    @Bean
    @Scope("prototype")
    public Video nextRelease() {
        return new Video("Cat & Curious " + film, LocalDateTime.of(year, 10, 18, 10, 0));
    }

}
...
Рейтинг: 0 / 0
03.01.2021, 01:43
    #40033122
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
А так?

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

    AtomicInteger film = new AtomicInteger(0);
    AtomicInteger year = new AtomicInteger(1999);

    public Channel channel (Video nextRelease) {
        .....
        film.incrementAndGet();
        year.incrementAndGet();
         .....
...
Рейтинг: 0 / 0
03.01.2021, 07:18
    #40033125
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
colacoca
Объясните, пожалуйста, почему при увеличении переменных film и year метод nextRelease не меняется.


Потому что bean video в данном примере создаётся 1 раз?
...
Рейтинг: 0 / 0
03.01.2021, 09:05
    #40033129
colacoca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
Lelouch, А нельзя сделать, чтобы его значение динамически менялось, как в этом примере?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
@Configuration
public class ChannelWithVideoStudioConfig implements VideoStudio{

    int film = 0;
    int year = 1999;

    @Bean
    public Channel channel (final VideoStudio videoStudio) {

        Channel channel1 = new Channel();

        channel1.addVideo(videoStudio.produce());
        channel1.addVideo(videoStudio.produce());
        channel1.addVideo(videoStudio.produce());
        channel1.addVideo(videoStudio.produce());
        channel1.addVideo(videoStudio.produce());
        channel1.addVideo(videoStudio.produce());
        channel1.addVideo(videoStudio.produce());
        channel1.addVideo(videoStudio.produce());
       

        return channel1;
    }

    @Override
    public Video produce() {

        film+=1;
        year+=2;
        return new Video("Cat & Curious " + String.valueOf(film), LocalDateTime.of(year, 10, 18, 10, 0));
    }

}
...
Рейтинг: 0 / 0
03.01.2021, 09:07
    #40033130
colacoca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
mayton, так тоже не получается, к сожалению
...
Рейтинг: 0 / 0
03.01.2021, 09:22
    #40033131
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
Lelouch
Потому что bean video в данном примере создаётся 1 раз?
Там же все не так... создается не бин, а фабрика, а вот внедряется уже бин созданный фабрикой, т.е. чтобы каждый раз было что-то новое нужно ObjectFactory<Video> внедрять, и дергать ее за getObject()
...
Рейтинг: 0 / 0
03.01.2021, 10:58
    #40033133
colacoca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
Андрей Панфилов, могли бы вы побольше описать очередность действий, не совсем понимаю, как работает objectFactory
...
Рейтинг: 0 / 0
03.01.2021, 11:07
    #40033134
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
colacoca
Андрей Панфилов, могли бы вы побольше описать очередность действий, не совсем понимаю, как работает objectFactory


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
import com.epam.rd.autotasks.confbeans.video.Channel;
import com.epam.rd.autotasks.confbeans.video.Video;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;

import java.time.LocalDateTime;

import static java.util.stream.Collectors.toSet;

public class ChannelWithPhantomVideoStudioConfig {

    int film = 0;
    int year = 1999;

    @Bean
    public Channel channel (ObjectFactory<Video> releaseFactory) {

        Channel channel1 = new Channel();

        channel1.addVideo(releaseFactory.getObject());
        film++;
        year++;
        channel1.addVideo(releaseFactory.getObject());
        film++;
        year++;
        channel1.addVideo(releaseFactory.getObject());
        System.out.println(channel1.videos()
                .collect(toSet()));

        return channel1;
    }

    @Bean
    @Scope("prototype")
    public Video nextRelease() {
        return new Video("Cat & Curious " + film, LocalDateTime.of(year, 10, 18, 10, 0));
    }

}
...
Рейтинг: 0 / 0
03.01.2021, 11:15
    #40033135
colacoca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
Андрей Панфилов, спасибо вам большое! Долго мучился с этой темой
...
Рейтинг: 0 / 0
03.01.2021, 15:44
    #40033188
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
Андрей Панфилов
Lelouch
Потому что bean video в данном примере создаётся 1 раз?
Там же все не так... создается не бин, а фабрика, а вот внедряется уже бин созданный фабрикой, т.е. чтобы каждый раз было что-то новое нужно ObjectFactory<Video> внедрять, и дергать ее за getObject()

Что именно в моей фразе не так?

И кстати, не соглашусь. Логичнее было бы аннотировать класс @Configuration и вызывать метод nextRelease().
...
Рейтинг: 0 / 0
03.01.2021, 16:00
    #40033191
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Prototype
Lelouch
Андрей Панфилов
пропущено...
Там же все не так... создается не бин, а фабрика, а вот внедряется уже бин созданный фабрикой, т.е. чтобы каждый раз было что-то новое нужно ObjectFactory<Video> внедрять, и дергать ее за getObject()

Что именно в моей фразе не так?

И кстати, не соглашусь. Логичнее было бы аннотировать класс @Configuration и вызывать метод nextRelease().


https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-java-further-information-java-config
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring, Prototype / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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