2014-01-29 2 views
2

Недавно у меня была дискуссия с моим другом относительно использования аннотации Spring @Autowire на сущности (JPA).Когда использовать примечание Spring @Autowire

В нашем проекте мы используем @Autowire annotaion, чтобы ввести Entity, но мой друг предлагает не использовать @Autowire аннотации на сущности классов. Когда я спросил, почему? У него нет надлежащего ответа. Поэтому я просто хотел знать, есть ли недостатки, используя @Autowire annotaion для классов сущностей.

Также, пожалуйста, объясните, когда следует использовать @Autowire аннотации или нет с примером.

Благодарим заранее.

+0

Мой проект - интеграция JSF, JPA и SPRING и получение объекта компании в контроллере с помощью * @ Autowire *. Entiy класс * @ Entity * * @ Table (имя = "T_Company") * класс компании {} класс класс CompanyController Controller { // wthin это я использую объект вызывает * @ Autowire * Компания компании; // я делать другие } операциям прозводится приложения bean.xml <боб ID = класс "Компания" = "xxx.Company" /> и я определил сущность в persistence.xml ххх. Компания В My CompanyController предпочтительнее использовать @Autowire Compnay, или я должен использовать компанию c = new Company(), и какой из них использовать и почему? – Girish

ответ

3

@Entity и @Autowire не являются взаимозаменяемыми.

аннотация @Entity указывает, что JavaBean является постоянным объектом. Это фактически аннотация JPA, а не аннотация Spring.
@Entity будет использоваться в sessionFactory пакетами toocancan.

@Autowired: введите ресурс по типу, то есть классу или интерфейсом аннотированного поля или подрядчика. Смотрите мой ответ Inject and Resource and Autowired annotations
@Autowired используется для введения зависимостей в качестве альтернативы установить его с помощью конфигурации XML

Возможно, этот ответ поможет понять Hibernate - spring annotated entities not scanned from within jar

UPDATE: После комментария внизу:
Компания является объектом вашего домена, поэтому вам не нужно использовать весну в этом случае.

<bean id="company" class="xxx.Company"/> 

выше будет возвращать тот же экземпляр с @autowire.
Даже если вы переключитесь на scope = "prototype", я не вижу причин использовать весну для этого. У вас должна быть услуга, которая будет использоваться для компании CRUD, например. CompanyService, эта услуга будет один тон, так что вы будете использовать @Autowire, чтобы ввести ее в контроллер, и он будет использовать базу JPA для реализации CRUD-х

Чтобы создать новую компанию вы будете использовать:

Company c = new Company //this probably will be binded from your ui form 
companyServic.saveOrUpdate(c); 

См. Следующий ответ spring rest service - hibernate dao - annotations - pojo - namedqueries. Для общей практики DAO и услуг.

+0

Мой проект является интеграция JSF, JPA и SPRING и получить объект компании в контроллер с помощью * @ Autowire * класса Entity * @ Entity * * @ Table (имя = "T_Company") * класс компании {} и у меня есть контрольные баллы вроде class CompanyController { // В этом я использую вызовы объектов * @ Autowire * Компания; // я делать другие } операциям прозводится приложения bean.xml <боб ID = класс "Компания" = "xxx.Company" /> и я определил сущность в persistence.xml ххх. Компания В CompanyController предпочтительнее использовать @Autowire Compnay или использовать компанию c = new Company(), и какой из них использовать и почему? – Girish

2

@Autowire - аннотация, используемая для выполнения инъекции зависимостей, почти такая же, как стандартная @Inject, вы можете взглянуть на справочное руководство по весне, чтобы увидеть разницу между этими двумя аннотациями.

@Entity является частью рамки jpa, используемой для обозначения класса как постоянного, весна не реализует эквивалентную аннотацию.