Весной, когда использовать новое ключевое слово и ключевое слово autowired - PullRequest
1 голос
/ 28 января 2020

я новичок в весне. Я не понимаю, когда использовать ключевое слово autowired и новое ключевое слово. Весной при использовании класса модели мы используем новое ключевое слово, а не ключевое слово Autowired

Ответы [ 3 ]

0 голосов
/ 28 января 2020

Новое ключевое слово выделило новое пространство памяти в куче для объекта. Затем конструктор инициализирует состояние объекта (свойства объекта).

. @Autowired просит Spring Framework ввести бин по типу .

. Вы создали приложение, которое имеет контроллер, сервис и слой дао. Эти слои в основном не содержат состояние приложения / бизнес-данных. Они обертывают функциональность. Бизнес-логика / Logi c для общения с БД и др. c. Так что из Сервиса, когда вы хотите вызвать save (entity) в слое dao, вы сделаете -> new DAO (). Save (entity) ...... Это бесполезная трата памяти, так как вы создаете новый Object каждый раз просто использовать функциональность. Эффективный способ сделать это -> Создать одноэлементный экземпляр службы -> один экземпляр для всего приложения, а затем внедрить их в другие места для использования функциональности.

Spring обрабатывает это для вас .. @ Service / @ REstController / @ Компонент в основном говорит Spring, чтобы создать экземпляр этого класса для вас - область действия по умолчанию - Singleton. И где бы вы ни упоминали -> @Autowired, он вводит этот компонент (по типу) в запрошенный класс, чтобы вы могли использовать эту функциональность.

Это в основном инверсия управления. Я придерживаюсь мнения, что разум отвечает за ответственность / контроль за созданием экземпляров, а внедрение их в нужных вам местах инвертируется от вас в среду. А также вы удаляете сильную связь путем внедрения по типу (обычно интерфейс), и пружина находит значение интерфейса и вводит его там, где вы упомянули @Autowired. В случае, если есть несколько имплов, вам нужно назвать каждый импл (или именем по умолчанию является имя класса с первым регистром в маленьком регистре - пожалуйста, подтвердите это один раз, потому что я не помню правильно) и используйте @Qualified (name), чтобы упомянуть Spring, который подразумевает, что вы хотите для внедрения.

Теперь ваша модель / сущность -> Это в основном Java bean -> имеющие свойства и методы доступа для доступа к этим свойствам. Они будут содержать состояние вашего приложения. Таким образом, каждый раз, когда новый пользователь регистрируется, вам нужен новый объект User, чтобы обойти слои для выполнения некоторой логики c и затем сохранить ее в БД. Таким образом, вы создадите новый объект с новым ключевым словом.

0 голосов
/ 29 января 2020

чтобы ответить на ваш вопрос, как проверить область действия bean-компонента, существует ConfigurableApplicationContext, который является подклассом ApplicationContext, который снова является подклассом BeanFactory. В configurableApplicationContext :: getBeanFactory есть метод, который возвращает вам BeanFactory. Вы можете вызывать различные методы для проверки области действия различных компонентов. Вот фрагмент кода, который я написал:

@Component
public class ScopeTestService {

@Autowired
private ConfigurableApplicationContext applicationContext;

public void testScope() {
    String scope = applicationContext.getBeanFactory().getBeanDefinition("scopeTestService").getScope();
    System.out.println(scope);
}

}

Вы можете проверить различные комбинации перестановок. Вы можете изменить с помощью аннотации @Scope ("тип области видимости") вместе с @ Component.

Результат для вышеуказанного кода: 2020-01-29 02: 24: 56.125 INFO 57500 --- [main] org .hibernate. 2020-01-29 02: 24: 58.066 INFO 57500 --- [main] c .example.demo.JpaTutorialsApplication: запуск приложения JpaTutorialsApplication через 7,023 секунды (JVM работает для 7,837) singleton 2020-01-29 02: 24: 58.077 INFO 57500 --- [Thread-2] j.LocalContainerEntityManagerFactoryBean: Закрытие JPA EntityManagerFactory для единицы сохраняемости по умолчанию 2020-01-29 02: 24: 58.082 INFO 57500 --- [Thread-2] com.zaxxer.hikari.HikariDataSource: HikariPool-1 - Завершение работы отключено ... 2020-01-29 02: 24: 58.098 INFO 57500 --- [Thread-2] com.zaxxer.hikari.HikariDataSource: HikariPool- 1 - Завершение работы завершено.

0 голосов
/ 28 января 2020

Типичное использование @Autowire - автоматическое заполнение свойства при инициализации компонента одноэлементной зависимостью. Если это действительно зависимость, которую следует инициализировать один раз и использовать повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...