Аннотация @Autowired в Spring Framework

В прошлом уроке мы внедряли бин админа в бин ПК с помощью конструктора или сеттера помеченных аннотацией @Autowired. Но аннотация @Autowired намного мощнее.

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

Класс ServerPC:

package com.someclasses; import org.springframework.stereotype.Component; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Scope; import org.springframework.beans.factory.annotation.Value; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @Component(“serverPCBean”) @Scope(“singleton”) public class ServerPC { //Аннотация Autowired может внедрять //зависимости без написаного конструктора или сеттера. //Аннотацию нужно просто написать над полем, которое //должно быть внедрено извне @Autowired private Administrator admin; @Value(“${pcid}”) private String pcid; @Value(“Acer”) private String pcBrand; ServerPC () { } //Нижние два метода для внедрения user в бин //этого класса теперь можно закомментировать. /* @Autowired public ServerPC (Administrator admin) { this.admin = admin; } @Autowired public void setAdmin(Administrator admin) { this.admin = admin; } */ public Administrator getAdmin() { return admin; } public void setPcid(String pcid) { this.pcid = pcid; } public void setPCBrand(String pcBrand) { this.pcBrand = pcBrand; } public String getPcid() { return pcid; } public String getPCBrand() { return pcBrand; } public void typeOfPC() { System.out.println(“Its server PC!”); } public void getAdminMessage() { admin.adminMessage(); } //Помечаем метод инициализации //(как в xml init-method) @PostConstruct public String someInitializationsMethod() { return “Some initializations”; } //Помечаем метод, который выполняется при //уничтожении бина (как в xml destroy-method) @PreDestroy public String someCleaningsMethod() { return “Some clean up”; } }

Класс сервлета останеться без изменений.

Пример программы:

import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import java.io.*; import org.springframework.context. support.ClassPathXmlApplicationContext; import com.someclasses.ServerPC; @WebServlet(“/springservlet”) public class SpringServlet extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( “applicationContext.xml”); //Достаем бин из context ServerPC serverpcSingleton = context.getBean( “serverPCBean”,ServerPC.class); //используем бин serverpcSingleton.setPCid(“12353425”); resp.getWriter().write(serverpcSingleton.getPCid()); } }

Компилируем Java файлики с использованием jar файлов спринг:

Запускаем Tomcat и открываем страницу сервлета по пути /springservlet:

Как видим, бины были успешно созданы и мы ими успешно воспользовались.

Конфигурация Spring бинов с помощью java класса.

Настройка Spring бинов через Java класс вместо XML. Практическое руководство по конфигурации с @Configuration, @Bean и внедрению зависимостей в Spring Framework.
Time to read: 14

Создание веб-приложения в Eclipse IDE

Пошаговое руководство по созданию веб-приложения в Eclipse IDE: настройка проекта, добавление Tomcat сервера и подготовка к работе с Spring MVC. Подробные инструкции с скриншотами.
Time to read: 20

Основы Spring MVC. Как работает DispatcherServlet

Разберитесь с принципами Spring MVC: роль DispatcherServlet как Front Controller, настройка web.xml и applicationContext.xml. Практическое руководство с примерами кода.
Time to read: 19