Аннотация и применение в Spring

задняя часть сервер Spring контейнер
  1. @Controller
  2. @RestController:
  3. @Service
  4. @Autowired
  5. @RequestMapping
  6. @RequestParam
  7. @ModelAttribute
  8. @Cacheable
  9. @CacheEvict
  10. @Resource
  11. @PostConstruct
  12. @PreDestroy
  13. @Repository
  14. @Component
  15. @Scope
  16. @SessionAttributes
  17. @Required
  18. @Qualifier

@Controller

Указывает, что этот класс является обработчиком контроллера Spring MVC, который используется для создания объектов, обрабатывающих HTTP-запросы.

1@Controller
2public class TestController {
3        @RequestMapping("/test")
4        public String test(Map<String,Object> map){
5
6            return "hello";
7        }
8}

@RestController

Аннотации, добавленные после Spring 4, изначально требовали, чтобы @ResponseBody возвращал json в @Controller.Если вы напрямую используете @RestController вместо @Controller, вам не нужно снова настраивать @ResponseBody, и формат json возвращается по умолчанию.

1@RestController
2public class TestController {
3        @RequestMapping("/test")
4        public String test(Map<String,Object> map){
5
6            return "hello";
7        }
8}

@Service

Он используется для маркировки компонентов бизнес-уровня, грубо говоря, это означает добавление того, что у вас есть метод аннотации для внедрения этого класса в конфигурацию Spring.

@Autowired

Используется для сборки бобов, может быть написано на поле или на методе.
По умолчанию зависимый объект должен существовать. Если вы хотите разрешить нулевые значения, вы можете установить для его обязательного свойства значение false, например: @Autowired(required=false)

@RequestMapping

Определение класса: Предоставляет предварительную информацию о сопоставлении запросов относительно корневого каталога веб-приложения.
В методе: Предоставляет дополнительную информацию о сопоставлении подразделений относительно URL-адреса в определении класса.

Студенты, которые использовали RequestMapping, знают, что у него много функций, поэтому подробное использование
Об этом я расскажу в следующей статье, прошу обратить внимание на паблик аккаунт, чтобы не пропустить.

@RequestParam

Используется для сопоставления данных области параметров запроса с параметрами метода обработки функции.
Например

1public Resp test(@RequestParam Integer id){
2        return Resp.success(customerInfoService.fetch(id));
3    }

Этот идентификатор должен получить значение идентификатора параметра, переданного из интерфейса.Если имя параметра, переданное интерфейсом, не соответствует полученному вами, вы также можете сделать следующее

1public Resp test(@RequestParam(value="course_id") Integer id){
2        return Resp.success(customerInfoService.fetch(id));
3    }

Где course_id — это параметр, передаваемый интерфейсом, а id — это имя параметра сопоставления course_id.

@ModelAttribute

Есть три места использования:

1. Отметить метод.

Отмеченный на методе, он будет выполняться перед каждым методом, отмеченным @RequestMapping.Если есть возвращаемое значение, возвращаемое значение будет автоматически добавлено в ModelMap.

A. В методе, который имеет возврат:

Когда ModelAttribute устанавливает значение, значение, возвращаемое методом, будет использовать это значение в качестве ключа и значение, полученное параметром, в качестве значения и сохранит его в модели.После выполнения следующего метода он окончательно эквивалентен модели. addAttribute("user_name", name); если @ModelAttribute не имеет пользовательского значения, это эквивалентно
model.addAttribute("name", name);

1@ModelAttribute(value="user_name")
2    public String before2(@RequestParam(required = false) String name, Model model) {
3        System.out.println("进入了2:" + name);
4        return name;
5    }
B. О методах, которые не возвращают:

Требуется ручной метод model.add

1    @ModelAttribute
2    public void before(@RequestParam(required = false) Integer age, Model model) {
3        model.addAttribute("age", age);
4        System.out.println("进入了1:" + age);
5    }

Мы создаем метод запроса в текущем классе:

 1@RequestMapping(value="/mod")
2    public Resp mod(
3            @RequestParam(required = false) String name,
4            @RequestParam(required = false) Integer age, 
5            Model model){
6        System.out.println("进入mod");
7        System.out.println("参数接受的数值{name="+name+";age="+age+"}");
8        System.out.println("model传过来的值:"+model);
9        return Resp.success("1");
10    }

Введите адрес доступа в браузере и добавьте параметры:
http://localhost:8081/api/test/mod?name=Я маленькая тарелка&age=12

Окончательный вывод выглядит следующим образом:

1进入了1:40
2进入了2:我是小菜
3进入mod
4参数接受的数值{name=我是小菜;age=12}
5model传过来的值:{age=40, user_name=我是小菜}

2. Отметить параметры метода.

Если он отмечен на параметрах метода, параметры, переданные клиентом, будут внедрены в указанный объект по имени, и этот объект будет автоматически добавлен в ModelMap, что удобно для использования слоем View.
Мы добавляем метод к вышеуказанному классу следующим образом

 1@RequestMapping(value="/mod2")
2    public Resp mod2(@ModelAttribute("user_name") String user_name, 
3            @ModelAttribute("name") String name,
4            @ModelAttribute("age") Integer age,Model model){
5        System.out.println("进入mod2");
6        System.out.println("user_name:"+user_name);
7        System.out.println("name:"+name);
8        System.out.println("age:"+age);
9        System.out.println("model:"+model);
10        return Resp.success("1");
11    }

Введите адрес доступа в браузере и добавьте параметры:
http://localhost:8081/api/test/mod2?name=Я маленькая тарелка&age=12
Окончательный вывод:

1进入了1:40
2进入了2:我是小菜
3进入mod2
4user_name:我是小菜
5name:我是小菜
6age:40
7model:{user_name=我是小菜, org.springframework.validation.BindingResult.user_name=org.springframework.validation.BeanPropertyBindingResult: 0 errors, name=我是小菜, org.springframework.validation.BindingResult.name=org.springframework.validation.BeanPropertyBindingResult: 0 errors, age=40, org.springframework.validation.BindingResult.age=org.springframework.validation.BeanPropertyBindingResult: 0 errors}

Из результатов видно, что аннотация @ModelAttribute, используемая в параметрах метода, на самом деле является методом принятия параметров и автоматического помещения их в объект модели для простоты использования.

@Cacheable

Используется для пометки кэшированных запросов. Может использоваться в методах или классах,

Отметка на методе означает, что метод поддерживает кэширование,
Отметка на классе означает, что все методы класса поддерживают кэширование.

список параметров

параметр объяснять пример
value название @Cacheable(значение={"c1","c2"}
key key @Cacheable(значение=”c1”, ключ=”#id”)
condition состояние @Cacheable(значение=”c1”, условие=”#id=1”)

Например, @Cacheable(value="UserCache") указывает, что при вызове метода, отмеченного этой аннотацией, логика по умолчанию использует логику получения результата из кеша. Если в кеше нет данных, пользователь- Записанная логика запроса выполняется, и запрос В случае успеха результат одновременно помещается в кеш.
Когда дело доходит до кэширования, оно имеет форму ключ-значение, поэтому ключ — это параметр (идентификатор) в методе, значение — результат запроса, а пространство имен UserCache определено в spring*.xml.

1@Cacheable(value="UserCache")// 使用了一个缓存名叫 accountCache   
2public Account getUserAge(int id) {  
3     //这里不用写缓存的逻辑,直接按正常业务逻辑走即可,
4     //缓存通过切面自动切入  
5    int age=getUser(id);   
6     return age;   
7} 

@CacheEvict

Метод, используемый для пометки кэша для очистки. При вызове этого метода кэш будет очищен. @CacheEvict(значение=”UserCache”)

список параметров

параметр объяснять пример
value название @CachEvict(значение={"c1","c2"}
key key @CachEvict(значение=”c1”,ключ=”#id”)
condition Состояние кеша, может быть пустым
allEntries Очистить ли весь кешированный контент @CachEvict (значение = «c1», allEntries = true)
beforeInvocation Очищать ли перед выполнением метода @CachEvict (значение = «c1», beforeInvocation = true)

@Resource

@Resource эквивалентен @Autowired
Просто @Autowired автоматически вставляется byType,
И @Resource автоматически вводится в соответствии с byName по умолчанию.

@Resource имеет два важных атрибута, а именно name и type. Spring анализирует атрибут name аннотации @Resource как имя компонента, а атрибут type анализирует его как тип компонента. Таким образом, если используется атрибут name, используется стратегия автоматического внедрения byName, а стратегия автоматического внедрения byType используется при использовании атрибута type. Если не указано ни имя, ни атрибут типа, стратегия будет автоматически внедрена с использованием byName через механизм отражения.

Порядок сборки @Resource:

  1. Если указаны и имя, и тип, единственный соответствующий bean-компонент будет найден из контекста Spring для сборки, и если он не будет найден, выдается исключение.
  2. Если имя указано, ищите bean-компонент с совпадающим именем (id) из контекста для сборки и сгенерируйте исключение, если оно не найдено.
  3. Если указан тип, из контекста для сборки будет найден только бин с соответствующим типом, если не найден или найдено более одного, будет выдано исключение
  4. Если не указано ни имя, ни тип, то он будет собран автоматически по методу byName, если совпадения нет, то будет отброшен к примитивному типу для сопоставления, а если совпадает, то будет автоматически собран;

@PostConstruct

Используется для обозначения того, что этот метод выполняется при запуске проекта. Используется для оформления нестатического метода void()
То есть он выполняется при старте контейнера spring и в основном используется для загрузки каких-то глобальных конфигураций, словарей данных и т.д.

Метод, измененный @PostConstruct, будет запущен, когда сервер загрузит сервлет, и будет выполнен сервером только один раз. PostConstruct выполняется после конструктора и перед методом init(). Метод PreDestroy() выполняется после выполнения метода destroy().

@PreDestroy

Метод, модифицированный @PreDestroy, будет запущен, когда сервер выгрузит сервлет, и будет вызываться сервером только один раз, аналогично методу destroy() сервлета. Метод, модифицированный @PreDestroy, будет запущен после метода destroy(), прежде чем сервлет будет полностью выгружен.

@Repository

Используется для маркировки компонентов доступа к данным, то есть компонентов DAO.

@Component

Относится к компонентам в целом, когда компоненты плохо классифицированы, мы можем использовать эту аннотацию, чтобы отметить

@Scope

Используется для настройки области действия bean-компонента Spring, идентифицирует область действия bean-компонента.
По умолчанию используется синглтон

  1. singleton: одноэлементный режим, в глобальном масштабе существует только один экземпляр

  2. прототип: режим прототипа, будет новый экземпляр каждый раз, когда вы получаете бин

  3. request:request указывает, что новый bean-компонент будет создан для каждого HTTP-запроса, и bean-компонент действителен только в рамках текущего HTTP-запроса.

  4. сеанс: область сеанса указывает, что новый bean-компонент будет создан для каждого HTTP-запроса, и bean-компонент действителен только в рамках текущего сеанса HTTP.

  5. глобальный сеанс: полезен только в портальных приложениях, создайте новый экземпляр компонента для каждого глобального http-сеанса.

@SessionAttributes

По умолчанию Spring MVC сохраняет данные в модели в поле запроса. Когда запрос завершается, данные становятся недействительными. Если вы хотите использовать на разных страницах. Тогда вам нужно использовать сеанс. Аннотация @SessionAttributes может хранить копию данных в модели в домене сеанса.

параметр:

  1. имена: это массив строк. Он должен написать имя данных, которые необходимо сохранить в сеансе.
  2. типы: в соответствии с типом указанного параметра сохраните параметр соответствующего типа в модели в сеансе
    3, значение: и имена одинаковы.
 1@Controller
2@SessionAttributes(value={"names"},types={Integer.class})
3public class ScopeService {
4        @RequestMapping("/testSession")
5        public String test(Map<String,Object> map){
6            map.put("names", Arrays.asList("a","b","c"));
7            map.put("age", 12);
8            return "hello";
9        }
10}

@Required

Применяется к методам установки свойств компонента и указывает, что затронутые свойства компонента должны быть заполнены в файле конфигурации XML во время настройки. В противном случае контейнер выдает исключение BeanInitializationException.

@Qualifier

Когда вы создаете несколько bean-компонентов одного типа и хотите связать только один из них со свойством, в этом случае вы можете использовать аннотацию @Qualifier и аннотацию @Autowired, указав, какой реальный bean-компонент будет собран, чтобы избежать путаницы.

Думаете, эта статья была вам полезна? пожалуйста, поделитесь с большим количеством людей Обратите внимание на «Безграничное программирование» и улучшите свои навыки принуждения.