2015-04-04 5 views
1

У меня есть небольшое приложение Spring MVC, где несколько классов зависят от объекта User.Spring MVC: Пользовательский объект bean best practive

Я хотел бы объявить его как @Component, поэтому я могу получить доступ к этому компоненту из любого места с помощью @Autowired аннотации.

@Component 
public class MyUser implements User { 

    // private fields 
    // getters and setters 

    public void fillByName(String username) { 
     userDao.select(username); 
    } 

} 

Очевидно, что объект пользователя должен быть уникальным для каждого пользователя. Я использую Spring Security, поэтому в моем SecurityContextHolder есть имя пользователя, которое я могу использовать для инициализации объекта User.

Какова наилучшая практика для инициализации? Должен ли я объявлять его как компонент, связанный с сеансом? Или я должен держать его как singleton-класс и просто обновлять все поля для каждого запроса? Или, может быть, я должен создать новый объект User из класса Controller для каждого запроса?

ответ

2

Лично мне не нравится идея иметь объект домена в качестве компонента. Я бы предложил иметь MyUser как класс и получить этот объект там, где это необходимо через UserService (UserDao), который является компонентом. Также это не хороший дизайн, когда объект домена знает о DAO.

+0

Хорошо, спасибо. Но должен ли я создавать объект User через UserDao для каждого запроса в классе Controller? Или мне нужно сохранить выбранный объект пользователя в сеансе? –

+0

Сохранение пользователя в сеансе является обычной практикой, если ваше приложение не масштабируется по горизонтали. Получение объекта каждый раз из базы данных может быть дорогостоящим, если вы не используете кеширование для слоя DAO. – Stan

+0

И, является ли класс Controller правильным местом для создания объекта User? –

Смежные вопросы