Почему природа прототипа нарушается, даже если класс изображен как Protoyple при весенней загрузке JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему природа прототипа нарушается, даже если класс изображен как Protoyple при весенней загрузке Java

Сообщение 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);
}
}

}


Подробнее здесь: https://stackoverflow.com/questions/785 ... ng-boot-ja
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»