Я разрабатываю приложение Spring Boot и использую Mybatis. Чтобы гарантировать неизменность объектов, созданных Mybatis, я заставляю Mybatis использовать <constructor>
вместо сеттеров, которые делают объекты изменяемыми. Как и другие порядковые объекты, эти объекты, созданные Mybatis, нуждаются в зависимостях для выполнения своих обязанностей, и эти зависимости иногда представляют собой bean-компоненты, экземпляры которых создаются Spring.
Если объект создается Spring, к нему легко внедрить зависимости. Но объект, созданный Mybatis, очевидно, находится вне контейнера DI Spring, и вы не можете использовать @Autowired
или другую механику Spring для внедрения его зависимостей.
Конечно, я могу вводить зависимости вручную после создания Mybatis, например:
DomainA d = DomainAMapper.fetchOne();
d.setDependency(dependency);
Но это нарушает неизменность DomainA
.
Как я могу удовлетворить свою потребность, то есть внедрить зависимости в объекты, созданные Mybatis, сохраняя при этом их неизменность?
Having spring dependencies in MyBatis may be an indicator of poor separation of concerns as they should be only concerned with the persistence layer
действительно имеет для меня смысл. Но в этом смысле должны ли сгенерированные Mybatis объекты иметь только геттеры и сеттеры и делегировать логику другим классам? У вас есть идеи, как избежать анемичной модели домена? 04.10.2017Repositories
, а классы MyBatis — какEntities
. Затем создайте слойService
, который является более естественным местом для хранения пружинных зависимостей. СлойService
должен быть тонким, но способным делегировать другим ресурсам. Вы также можете представить слойService
как слойFacade
для ваших ресурсов. 04.10.2017The Service layer should be thin but capable to delegate to other resources
. Так может ли этот логический поток быть возможным примером? 1) Класс службы вызывает репозитории для извлечения сущности из БД, 2) Класс службы вызывает некоторые фабрики для создания экземпляра объекта домена, содержащего извлеченную сущность, 3) Класс службы вызывает метод объекта домена для выполнения бизнес-логики. 05.10.2017