Почему значение переменной count увеличивается с каждым вызовом?
Я полагаю, что оно увеличивается, потому что DbDao
определено как singleton, что означает, что spring поддерживает один объект введите DbDao
в контексте приложения, и этот объект будет вставлен (автоматически подключен) в MySchedulers.
В методе m1
DbDao
вы всегда увеличиваете поле данных count
(++count
) так правильно, что он будет увеличиваться при каждом вызове - это ожидаемое поведение.
Как я могу получить значение count = 1 в каждом вызове?
Ну, это зависит от того, что вы действительно хотите сделать. Например, не используйте count
в качестве поля данных, но оно действительно зависит от логики c в вашем сценарии.
Я мог бы сказать, что вы можете использовать область действия прототипа для DbDao - но это на самом деле не имеет смысла, потому что репозитории обычно определяются как одиночные (я не вижу причины создавать новый объект репозитория при каждом вызове к этому).
Поскольку предполагается, что репозитории вызываются одновременно из разных потоков (или, по крайней мере, поддерживают эту модель выполнения), обычно репозитории не должны сохранять состояние.
Обновление 1
На основании комментария OP:
Когда по умолчанию используется планировщик, пружина выделяет только 1 поток (размер пула = 1), поэтому , не будет никаких проблем, связанных с потоками, так как все вызовы будут выполняться в одном потоке. Это верно, конечно, до тех пор, пока код, который вы вызываете из «планировщика», не вызывается одновременно другими потоками (например, из контроллера остатка, слушателей сообщений и т. Д.).
Вы можете настроить размер пула, хотя и тогда возможно, что два потока, принадлежащие планировщику, будут вызывать один и тот же метод (например, один из MyDao
).
В этом случае вам решать, что именно делать хочешь защитить и как, весна тебе здесь не поможет. Как я объяснил выше, действительно, поскольку MyDao
является одноэлементным, многие потоки получат доступ к его общему состоянию, поэтому в этом случае вы, вероятно, захотите что-то с ним сделать.