В приведенном ниже коде, хотя MTEndOfDayParser является прототипом, MTEndOfDayProcessor является одноэлементным. Поскольку мы передаем объект MTEndOfDayParser в конструктор, наш класс-прототип MTEndOfDayParser не ведет себя как прототип. Не могли бы вы предложить несколько идей, позволяющих гарантировать, что MTEndOfDayParser сохранит свой характер прототипа? В настоящее время элемент данных баланса частного списка сохраняет предыдущие значения и не создает новый объект каждый раз, когда используется MTEndOfDayParser. Пожалуйста, предложите решение, чтобы класс MTEndOfDayParser рассматривался как прототип и каждый раз при необходимости создавался новый объект.
Класс MTEndOfDayProcessor.java
@Component("MT940MessageProcessor")
@Qualifier("MT940MessageProcessor")
public class MTEndOfDayProcessor extends MTProcessor {
@Autowired
public MTEndOfDayProcessor(@Qualifier(MT_END_OF_DAY_CONVERTER) MesssageConverter mtMessageConversion,
MTEndOfDayParser parser, Logger logger) {
super(mtMessageConversion, parser, logger);
}
}
Абстрактный класс MTProcessor.java
@Getter
public abstract class MTProcessor extends MesssageProcessor{
private MTMessage mtMessage;
public Logger logger;
protected MTParser mtParser;
public MTProcessor(MesssageConverter mtMessageConversion, MTParser mtParser, Logger logger) {
this.converter = mtMessageConversion;
this.mtParser = mtParser;
this.logger = logger;
}
public void prcessMessage(InputStream body, ProcessingQBlobInfo processingQBlobInfo) throws IOException {
SwiftMT940Lexer swiftMT940Lexer = new SwiftMT940Lexer(CharStreams.fromStream(body));
CommonTokenStream tokens = new CommonTokenStream(swiftMT940Lexer);
SwiftMT940Parser swiftMT940Parser = new SwiftMT940Parser(tokens);
swiftMT940Parser.removeErrorListeners();
swiftMT940Parser.addErrorListener(new ParserErrorHandler(logger));
ParseTreeWalker walker = new ParseTreeWalker();
MTParserListner mtParserListern = new MTParserListner(mtParser, logger,
Command.toCommand(processingQBlobInfo.getCommand()));
walker.walk(mtParserListern, swiftMT940Parser.message());
mtMessage = mtParser.getMessage();
//mtParser.reset();
mtMessage.setProcessingQBlobInfo(processingQBlobInfo);
this.statements = converter.convert(mtMessage);
}
protected void createDBRecord() {
financialService.createDBRecords(statements);
}
}
Класс MTEndOfDayParser.java
@Component("MT940MessageProcessor")
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MTEndOfDayParser extends MTParser {
Logger logger;
MTEndOfDayMessage mtEndOfDayMessage;
private List balances;
public MTEndOfDayParser(Logger logger) {
super();
this.logger = logger;
this.mtEndOfDayMessage = new MTEndOfDayMessage();
this.balances = new ArrayList();
}
@Override
public String process(String blockText, String activeTag, String prevTag) {
switch (activeTag) {
case "60F", "60M", "64", "65": {
processAccountBalance(blockText, activeTag);
}
case "62M", "62F": {
processAccountBalance(blockText, activeTag);
bRead62Tag = true;
}
default : super.processCommon(blockText, activeTag, prevTag, mtEndOfDayMessage);
}
return prevTag;
}
@Override
public MTMessage getMessage() {
mtEndOfDayMessage.setBalance(balances);
return mtEndOfDayMessage;
}
private void processAcountBalance(String text, String activeTag) {
String methodKey="processAcountBalance";
Balance balance = null;
switch (activeTag) {
case "60F": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.OPBD);
}
case "60M": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.ITOP);
}
case "62M": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.ITCL);
}
case "62F": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.CLBD);
}
case "64": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.CLAV);
}
case "65": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.FWAV);
}
default: logErrormessage(methodKey, activeTag);
}
if(null != balance) {
this.balances.add(balance);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... ng-boot-ja
Почему природа прототипа нарушается, даже если класс изображен как Protoyple при весенней загрузке Java ⇐ JAVA
Программисты JAVA общаются здесь
1716786721
Anonymous
В приведенном ниже коде, хотя MTEndOfDayParser является прототипом, MTEndOfDayProcessor является одноэлементным. Поскольку мы передаем объект MTEndOfDayParser в конструктор, наш класс-прототип MTEndOfDayParser не ведет себя как прототип. Не могли бы вы предложить несколько идей, позволяющих гарантировать, что MTEndOfDayParser сохранит свой характер прототипа? В настоящее время элемент данных баланса частного списка сохраняет предыдущие значения и не создает новый объект каждый раз, когда используется MTEndOfDayParser. Пожалуйста, предложите решение, чтобы класс MTEndOfDayParser рассматривался как прототип и каждый раз при необходимости создавался новый объект.
Класс MTEndOfDayProcessor.java
@Component("MT940MessageProcessor")
@Qualifier("MT940MessageProcessor")
public class MTEndOfDayProcessor extends MTProcessor {
@Autowired
public MTEndOfDayProcessor(@Qualifier(MT_END_OF_DAY_CONVERTER) MesssageConverter mtMessageConversion,
MTEndOfDayParser parser, Logger logger) {
super(mtMessageConversion, parser, logger);
}
}
Абстрактный класс MTProcessor.java
@Getter
public abstract class MTProcessor extends MesssageProcessor{
private MTMessage mtMessage;
public Logger logger;
protected MTParser mtParser;
public MTProcessor(MesssageConverter mtMessageConversion, MTParser mtParser, Logger logger) {
this.converter = mtMessageConversion;
this.mtParser = mtParser;
this.logger = logger;
}
public void prcessMessage(InputStream body, ProcessingQBlobInfo processingQBlobInfo) throws IOException {
SwiftMT940Lexer swiftMT940Lexer = new SwiftMT940Lexer(CharStreams.fromStream(body));
CommonTokenStream tokens = new CommonTokenStream(swiftMT940Lexer);
SwiftMT940Parser swiftMT940Parser = new SwiftMT940Parser(tokens);
swiftMT940Parser.removeErrorListeners();
swiftMT940Parser.addErrorListener(new ParserErrorHandler(logger));
ParseTreeWalker walker = new ParseTreeWalker();
MTParserListner mtParserListern = new MTParserListner(mtParser, logger,
Command.toCommand(processingQBlobInfo.getCommand()));
walker.walk(mtParserListern, swiftMT940Parser.message());
mtMessage = mtParser.getMessage();
//mtParser.reset();
mtMessage.setProcessingQBlobInfo(processingQBlobInfo);
this.statements = converter.convert(mtMessage);
}
protected void createDBRecord() {
financialService.createDBRecords(statements);
}
}
Класс MTEndOfDayParser.java
@Component("MT940MessageProcessor")
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MTEndOfDayParser extends MTParser {
Logger logger;
MTEndOfDayMessage mtEndOfDayMessage;
private List balances;
public MTEndOfDayParser(Logger logger) {
super();
this.logger = logger;
this.mtEndOfDayMessage = new MTEndOfDayMessage();
this.balances = new ArrayList();
}
@Override
public String process(String blockText, String activeTag, String prevTag) {
switch (activeTag) {
case "60F", "60M", "64", "65": {
processAccountBalance(blockText, activeTag);
}
case "62M", "62F": {
processAccountBalance(blockText, activeTag);
bRead62Tag = true;
}
default : super.processCommon(blockText, activeTag, prevTag, mtEndOfDayMessage);
}
return prevTag;
}
@Override
public MTMessage getMessage() {
mtEndOfDayMessage.setBalance(balances);
return mtEndOfDayMessage;
}
private void processAcountBalance(String text, String activeTag) {
String methodKey="processAcountBalance";
Balance balance = null;
switch (activeTag) {
case "60F": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.OPBD);
}
case "60M": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.ITOP);
}
case "62M": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.ITCL);
}
case "62F": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.CLBD);
}
case "64": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.CLAV);
}
case "65": {
balance = AccountBalanceParser.processBalance(text);
balance.setBalanceType(BalanceType.FWAV);
}
default: logErrormessage(methodKey, activeTag);
}
if(null != balance) {
this.balances.add(balance);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78536559/why-prototype-nature-break-even-if-class-depicted-as-protoyple-in-spring-boot-ja[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия