5 пунктов, чтобы полностью понять аннотации SpringBoot

Spring Boot
Автор: Чжан Бойи

1. Список аннотаций

@SpringBootApplication: содержит аннотации @ComponentScan, @Configuration и @EnableAutoConfiguration. Где @ComponentScan позволяет Spring Boot сканировать класс Configuration и добавлять его в контекст программы.
@Configuration эквивалентен XML-файлу конфигурации Spring; безопасность типов можно проверить с помощью кода Java.
@EnableAutoConfiguration Автоматическая настройка.
Сканирование компонентов @ComponentScan, которое может автоматически обнаруживать и собирать некоторые bean-компоненты.
@Component можно использовать с CommandLineRunner для выполнения некоторых основных задач после запуска программы.
Аннотация @RestController представляет собой набор @Controller и @ResponseBody, указывающий, что это bean-компонент контроллера, а возвращаемое значение функции напрямую заносится в тело ответа HTTP, которое является контроллером в стиле REST.
@Autowired импортируется автоматически.
@PathVariable получает параметры.
@JsonBackReference решает проблему вложенных внешних ссылок.
@RepositoryRestResourcepublic используется с spring-boot-starter-data-rest

2. Подробное объяснение аннотаций

@SpringBootApplication: объявляет, что spring boot автоматически настраивает программу с необходимой конфигурацией Эта конфигурация эквивалентна трем конфигурациям: @Configuration, @EnableAutoConfiguration и @ComponentScan.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@ResponseBody: указывает, что возвращаемый результат этого метода напрямую записывается в тело ответа HTTP, которое обычно используется при асинхронном получении данных и используется для создания RESTful API. После использования @RequestMapping возвращаемое значение обычно анализируется как путь перехода.После добавления @responsebody возвращаемый результат не будет анализироваться как путь перехода, а будет записан непосредственно в тело ответа HTTP.
Например, асинхронное получение данных json и добавление @responsebody напрямую вернет данные json. Эта аннотация обычно используется в сочетании с @RequestMapping.
Образец кода:
@RequestMapping(“/test”)
@ResponseBody
public String test(){
    return”ok”;
}

@Controller: используется для определения класса контроллера. В проекте spring контроллер отвечает за пересылку запроса URL, отправленного пользователем, на соответствующий интерфейс службы (уровень службы). Как правило, эта аннотация находится в классе, а метод обычно необходимо сотрудничать с аннотацией @RequestMapping .
Образец кода:
@Controller
@RequestMapping(“/demoInfo”)
publicclass DemoController {
    @Autowired
    private DemoInfoService demoInfoService;
    @RequestMapping("/hello")
    public String hello(Map<String,Object> map){
        System.out.println("DemoController.hello()");
        map.put("hello","from TemplateController.helloHtml");
        //会使用hello.html或者hello.ftl模板进行渲染显示.
        return"/hello";
    }
}

@RestController: используется для маркировки компонентов уровня управления (например, действий в struts), коллекции @ResponseBody и @Controller.
Образец кода:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(“/demoInfo2”)
publicclass DemoController2 {
    @RequestMapping("/test")
    public String test(){
        return"ok";
    }
}

@RequestMapping: предоставляет информацию о маршрутизации и отвечает за сопоставление URL-адресов с определенными функциями в контроллере.
@EnableAutoConfiguration: автоматическая настройка Spring Boot: попытки автоматической настройки вашего приложения Spring на основе добавляемых вами зависимостей jar. Например, если у вас есть HSQLDB в пути к классам и вы не настроили вручную какие-либо компоненты подключения к базе данных, мы автоматически настроим базу данных в памяти».
Вы можете выбрать автоматическую настройку, добавив аннотации @EnableAutoConfiguration или @SpringBootApplication в класс @Configuration. Если вы обнаружите, что определенные классы автоматической настройки вам не нужны, вы можете отключить их с помощью атрибута exclude аннотации @EnableAutoConfiguration.
@ComponentScan: указывает, что класс будет автоматически обнаруживать и сканировать компоненты. Личное понимание эквивалентно тому, что если вы просканируете классы с аннотациями, такими как @Component, @Controller, @Service и т. д., и зарегистрируете их как Beans, вы сможете автоматически собрать все компоненты Spring, включая классы @Configuration.
Мы часто используем аннотацию @ComponentScan для поиска bean-компонентов и их импорта с аннотацией @Autowired. Все компоненты Spring, включая классы @Configuration, могут собираться автоматически. Мы часто используем аннотацию @ComponentScan для поиска bean-компонентов и их импорта с аннотацией @Autowired.
Если конфигурации нет, Spring Boot будет сканировать классы, аннотированные с помощью @Service, @Repository и т. д., в пакете, в котором находится класс запуска, и в подпакете.
@Configuration: эквивалентен традиционному файлу конфигурации xml.Если некоторым сторонним библиотекам необходимо использовать файлы xml, рекомендуется по-прежнему использовать класс @Configuration в качестве основного класса конфигурации проекта — вы можете использовать @ImportResource аннотация для загрузки файла конфигурации xml.
@Import: используется для импорта других классов конфигурации.
@ImportResource: используется для загрузки файла конфигурации xml.
@Autowired: автоматически импортировать зависимые компоненты
@Service: компоненты, обычно используемые для украшения сервисного уровня.
@Repository: используйте аннотацию @Repository, чтобы убедиться, что DAO или репозитории предоставляют неправильный перевод. Классы DAO или репозиториев, измененные этой аннотацией, будут обнаружены и настроены ComponentScan, и нет необходимости предоставлять для них элементы конфигурации XML.
@Bean: аннотирование метода с помощью @Bean эквивалентно bean-компоненту, сконфигурированному в XML.
@Value: значение свойства, которое вводится в конфигурацию Spring boot application.properties.
Образец кода:
@Value(value = “#{message}”)
private String message;

@Inject: эквивалент @Autowired по умолчанию, но без обязательного атрибута;
@Component: относится к компонентам в целом. Когда компоненты не классифицированы должным образом, мы можем использовать эту аннотацию, чтобы пометить их.
@Bean: Эквивалентно XML, он размещается над методом, а не над классом, что означает, что bean-компонент генерируется и передается Spring для управления.
@AutoWired: автоматически импортировать зависимые компоненты. Метод по типу. Используйте сконфигурированный Bean-компонент для завершения сборки атрибутов и методов.Он может аннотировать переменные-члены класса, методы и конструкторы для завершения работы по автоматической сборке. При добавлении (required=false) об ошибке не будет сообщено, даже если бин не может быть найден.
@Qualifier: при наличии нескольких bean-компонентов одного типа для указания можно использовать @Qualifier("name"). Работает с @Autowired. В дополнение к вставке по имени квалифицированные дескрипторы @Qualifier могут обеспечить более детальный контроль над тем, как выбираются кандидаты.Конкретное использование заключается в следующем:
@Autowired
@Qualifier(value = “demoInfoService”)
private DemoInfoService demoInfoService;

@Resource(name="name", type="type"): если в скобках нет содержимого, по умолчанию используется значение byName. Похоже на @Autowired.

3. Аннотация JPA

@Entity: @Table(name=""): указывает, что это класс сущности. Обычно используемые для jpa, эти две аннотации обычно используются вместе, но если имя таблицы и имя класса сущностей совпадают, @Table можно опустить.
@MappedSuperClass: используется для сущности, которая определена как родительский класс. Атрибуты родительского класса могут наследоваться подклассами.
@NoRepositoryBean: обычно используется в качестве репозитория родительского класса, с этой аннотацией Spring не будет создавать экземпляр репозитория.
@Column: можно опустить, если имя поля совпадает с именем столбца.
@Id: указывает, что атрибут является первичным ключом.
@GeneratedValue(strategy = GenerationType.SEQUENCE, генератор = "repair_seq"): указывает, что стратегия генерации первичного ключа — это последовательность (может быть Auto, IDENTITY, native и т. д. Auto означает, что ее можно переключать между несколькими базами данных) и имя указанной последовательности — repair_seq.
@SequenceGeneretor(name = "repair_seq", sequenceName = "seq_repair", selectionSize = 1): name — это имя последовательности для использования, sequenceName — это имя последовательности в базе данных, и эти два имени могут быть согласованы.
@Transient: указывает, что это свойство не является сопоставлением с полем таблицы базы данных, и платформа ORM будет игнорировать это свойство. Если атрибут не является сопоставлением полей таблицы базы данных, он должен быть помечен как @Transient, в противном случае платформа ORM по умолчанию использует его аннотацию как @Basic. @Basic(fetch=FetchType.LAZY): тег может указывать, как загружаются свойства объекта.
@JsonIgnore: функция состоит в том, чтобы игнорировать некоторые свойства Java-бина во время сериализации json, и затрагиваются как сериализация, так и десериализация.
@JoinColumn(name="loginId"): один к одному: внешний ключ в этой таблице, который указывает на другую таблицу. Один ко многим: другая таблица указывает на внешний ключ этой таблицы.
@OneToOne, @OneToMany, @ManyToOne: соответствуют «один к одному», «один ко многим» и «многие к одному» в файле конфигурации гибернации.

Четыре, понимание, связанное с SpringMVC

@RequestMapping: @RequestMapping("/path") указывает, что этот контроллер обрабатывает все запросы URL для "/path". RequestMapping — это аннотация для обработки сопоставления адресов запросов, которую можно использовать в классах или методах.
Используется в классе, указывая, что все методы класса, отвечающие на запросы, используют этот адрес в качестве родительского пути. Аннотация имеет шесть свойств:
  • params: указывает, что запрос должен содержать определенные значения параметров для обработки этим методом.
  • заголовки: указанный запрос должен содержать определенные указанные значения заголовка, чтобы этот метод мог обработать запрос.
  • значение: указывает фактический адрес запроса, указанный адрес может быть в режиме шаблона URI
  • метод: указывает тип метода запроса, GET, POST, PUT, DELETE и т. д.
  • потребляет: укажите тип отправленного контента (Content-Type) запроса на обработку, например, application/json,text/html;
  • производит: указывает возвращаемый тип содержимого, который возвращается только в том случае, если тип (Accept) в заголовке запроса содержит указанный тип.
@RequestParam: используется перед параметрами метода.
@RequestParam
Строка a = request.getParameter("a").
@PathVariable: переменная пути. как
RequestMapping(“user/get/mac/{macAddress}”)
public String getByMacAddress(@PathVariable String macAddress){
    //do something;
}

Параметр должен совпадать с именем в фигурных скобках.

5. Глобальная обработка исключений

@ControllerAdvice: содержит @Component. можно сканировать. Единая обработка исключений.
@ExceptionHandler (Exception.class): используется в методе, чтобы указать, что следующий метод выполняется при обнаружении этого исключения.

Наконец

Прошу всех обратить внимание на мой паблик [Программист в погоне за ветром], в нем будут обновляться статьи, а также размещаться отсортированная информация.