Чтобы облегчить развитие, которое мы используем в нашем ежедневном комментариев, бумажные заметки будут разработаны и объединены, необходимы для классификации его, анализа комбинированных случаев использования, эта коллекция вместе для последующего использования. Основные примечания будут продолжать обновлять ежедневное использование, также могут проинформировать другие пояснительные комментарии.
1 Внедрение зависимостей
1.1 Аннотация компонента @component
@component, а остальные@Controller,@Service,@RepositoryОба объединены с аннотацией @component, в основном для удобства классификации пользовательских компонентов класса. Компоненты в контейнере IOC загружаются по умолчанию.При запуске контейнера он вызывает конструктор без аргументов для создания объекта, а затем выполняет операции инициализации и присваивания.
аннотация | Разобрать | использование |
---|---|---|
@Component | Аннотация компонента.При использовании этой аннотации он автоматически сканирует и загружает класс в контейнер ICO на основе конфигурации аннотации и сканирования пути к классам. | Аннотация к классу |
@Controller | Применяемый на уровне MVC (уровень управления) DispatcherServlet автоматически сканирует класс, аннотированный этой аннотацией, а затем сопоставляет веб-запрос с методом, аннотированным с помощью @RequestMapping. | Аннотация к классу |
@Service | Применяется на сервисном уровне (уровень бизнес-логики). | Аннотация к классу |
@Repository | Применяется на уровне dao (уровень доступа к данным) | Аннотация к классу |
1.2 Аннотации внедрения зависимостей
@Autowired и @Inject, @Resource можно использовать с @Qualifier или @Name для предотвращения ошибок при внедрении нескольких экземпляров и при внедрении значения @Value.
аннотация | Разобрать | использование |
---|---|---|
@Autowired | Внедрение зависимостей, реализованное классом AutowiredAnnotationBeanPostProcessor, по умолчанию внедряется в соответствии с типом, поэтому, если есть несколько кандидатов Bean одного типа, вам необходимо ограничить одного из кандидатов, иначе будет выдано исключение. | Можно аннотировать поля, методы |
@Inject | Работает так же, как @Autowired | Можно аннотировать поля, методы, конструкторы |
@Resource | По умолчанию он собирается по имени, а имя можно указать через атрибут name. | Можно аннотировать поля, методы |
@Qualifier | В дополнение к внедрению в соответствии с именем квалифицированный дескриптор может управлять более детальным выбором кандидатов.Его можно использовать в сочетании с @Autowired или @Inject для точного внедрения. | Об аннотируемых полях, методах, параметрах и аннотациях |
1.3 Объем и жизненный процесс
@Scope, с 4 областями для просмотраСфера охвата и связанные с этим вопросыГлавы и процессы жизненного цикла обрабатывают @PostConstruct, @PreDestroy.
аннотация | Разобрать | использование |
---|---|---|
@Scope | Имеет 4 области действия: одиночный, прототип, сеанс, запрос, по умолчанию используется одноэлементный одноэлементный режим. | Аннотируемый во время создания класса |
@PostConstruct | Эквивалентно методу init, используемому в методе, выполняемом при инициализации бина. | Можно аннотировать метод |
@PreDestroy | Эквивалент метода destroy, используемого в методе, выполняемом при уничтожении компонента. | Можно аннотировать метод |
Раздел 1.4 Варианты использования (вместе с разделами 1.1, 1.2, 1.3)
@Service //组件注入,注明为service组件
@Scope("prototype")//声明Scope为Prototype
public class UseFunctionService {
@Autowired //默认按type注入
@Qualifier("functionService") //精确注入
FunctionService functionService;
@Resource(name="baseDao")//默认按name注入,可以通过name和type属性进行选择性注入
private BaseDao baseDao;
@Inject
@Qualifier("userServiceImpl") //精确注入
public IUserService userService;
@PostConstruct//执行完构造函数后执行
public postConstruct(){
System.out.println("postConstruct");
}
@PreDestroy//在销毁Bean前执行
public perDestroy(){
System.out.println("perDestroy");
}
@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
this.userDao = userDao;
}
public String SayHello(String word){
return functionService.sayHello(word);
}
}
2. Аннотации конфигурации
2.1 Аннотация конфигурации @Configuration
@Configuration может заменить файл конфигурации xml для конфигурации. Аннотированный класс содержит один или несколько методов, аннотированных с помощью @Bean. Эти методы будут сканироваться классом AnnotationConfigApplicationContext или AnnotationConfigWebApplicationContext и использоваться для построения определений компонентов и инициализации контейнера Spring. Может использоваться с @PropertySource. @Configuration расширяет @SpringBootConfiguration как метааннотацию
аннотация | Разобрать | использование |
---|---|---|
@Configuration | Аннотация класса конфигурации, которая может использоваться с @Beae, @Propertysource для настройки | Аннотации к классам, интерфейсам, перечислениям |
@SpringBootConfiguration | Комбинированные аннотации, конфигурация @Configuration, @EnableAutoConfiguration включает автоматическую настройку, @ComponentScan по умолчанию сканирует родственный каталог класса, в котором находится @SpringBootApplication, и его подкаталоги | Может быть аннотирован в классе |
@AutoConfigureAfter | Настроить после указанного класса автонастройки | Может быть аннотирован в классе |
2.2 Скан-аннотация
Аннотация @ComponentScan, категория аннотации помечена как @Configuration выше, чтобы фильтровать комментарии @filter
аннотация | Разобрать | использование |
---|---|---|
@ComponentScan | Определите путь сканирования. По умолчанию классы, аннотированные с помощью @Controller, @Service, @Repository и @Component, будут загружены в контейнер Spring. excludeFilters указывает компоненты, которые должны быть исключены во время сканирования, а includeFilters указывает только включенные компоненты. во время сканирования. | Может быть аннотирован в классе Class |
@ComponentScans | Содержит массив @ComponentScan | Может быть аннотирован в классе Class |
@filter | Объявите фильтр типа, который будет использоваться в качестве включения или исключения фильтра | Может быть аннотирован в @ComponentScan |
2.3 Внедрение аннотаций для ресурсов, значений и т. д.
Вы можете вставлять файлы конфигурации, свойства в файлах конфигурации и системные свойства в обязательные поля или в bean-компоненты.
аннотация | Разобрать | использование |
---|---|---|
@Value | Внедрение значений, которое может вводить общие символы, системные свойства, результаты операций выражений, свойства других bean-компонентов, содержимое файла, содержимое запроса URL, значения атрибутов файла конфигурации и т. д. | Можно аннотировать поля, методы, параметры |
@Bean | Объявите возвращаемое значение текущего метода как Bean, а метод init() и destroy() можно определить в классе, соответствующем возвращаемому Bean, а затем определить в @Bean(initMethod="init", destroyMethod= «уничтожить»), в «Выполнить инициализацию после строительства» и «уничтожить перед разрушением». | Аннотировать к методу, к аннотации |
@PropertySource | Указывает расположение файла конфигурации, используемого с классом @configuration. | Аннотация к классу Класс, интерфейс |
@ImportResource | Загрузить файл конфигурации XML | Аннотация к классу Класс, интерфейс |
@ConfigurationProperties | Свяжите свойство properties с bean-компонентом и его свойствами | Можно аннотировать классы и интерфейсы |
@Import | Используется для импорта классов конфигурации | Можно аннотировать классы и интерфейсы |
2.4 Условная аннотация @Conditional
@ Ограничение создает определенную фасоль, основанную на удовлетворении определенного состояния. Многие условные аннотации могут быть расширены на основе мета-аннотации @Conditional.
аннотация | Разобрать | использование |
---|---|---|
@ConditionalOnBean | Если в контейнере Spring есть соответствующий экземпляр, вы можете найти его в контейнере по типу, имени класса, аннотации и псевдониму экземпляра (вы можете настроить поиск из текущего контейнера или родительского контейнера или обоих). Эти атрибуты являются массивами. Поиск по отношению "и" | по аннотированному методу |
@ConditionalOnClass | Есть ли соответствующий класс в загрузчике классов, логика аналогична @ConditionalOnBean | Можно аннотировать методы, классы, интерфейсы |
@ConditionalOnExpression | Проверьте, выполняется ли выражение SpEL | Можно аннотировать методы, классы, интерфейсы |
@ConditionalOnJava | Указывает, соответствует ли версия Java требованиям | Можно аннотировать методы, классы, интерфейсы |
@ConditionalOnMissingBean | Если соответствующий экземпляр отсутствует в контейнере Spring, логика аналогична @ConditionalOnBean. | Можно аннотировать методы, классы, интерфейсы |
@ConditionalOnMissingClass | Если соответствующий экземпляр отсутствует в контейнере Spring, логика аналогична @ConditionalOnBean. | Можно аннотировать методы, классы, интерфейсы |
@ConditionalOnNotWebApplication | Независимо от того, является ли приложение не веб-программой, атрибуты не предоставляются, только идентификатор | Можно аннотировать методы, классы, интерфейсы |
@ConditionalOnProperty | Независимо от того, существует ли атрибут в среде приложения, логика аналогична @ConditionalOnBean. | Можно аннотировать методы, классы, интерфейсы |
@ConditionalOnResource | Существует ли указанный файл ресурсов. Есть только одно свойство, resources, которое представляет собой массив строк. Он будет запрашивать у загрузчика классов, существует ли соответствующий файл ресурсов и может ли он быть аннотирован в методах, классах и интерфейсах. | |
@Profile | Укажите, к какому профилю принадлежит компонент: spring.profiles.active и spring.profiles.default (по умолчанию) | Аннотация может быть в методе, классе класса, интерфейсе |
Секции с Примером 2.5 (2,1,2,2,2,3,2,4 бар)
@Configuration
//@SpringBootConfiguration
@ComponentScan(value="com.cn",ComponentDefaultFilters=true,
includeFilters={
@Filter(type=FilterType.ANNOTATION,classes={Controller.class}),
@Filter(type=FilterType.CUSTOM,classes={MyTypeFilter.class})
})
@ImportResource("classpath:condition.xml")//导入xml配置
@Import(ConditionConfig.class)//导入ConditionConfig Class,并会实例化到容器中以及ConditionConfig中的配置也一起注入
public class Config {
@Value("I Love You!") //注入普通字符
private String normal;
@Value("#{systemProperties['os.name']}") //注入操作系统属性
private String osName;
@Value("#{ T(java.lang.Math).random() * 100.0 }") //注入表达式运算结果
private double randomNumber;
@Value("#{demoService.another}") //注入其他Bean的属性
private String fromAnother;
@Value("classpath:org/light4j/sping4/usually/el/test.txt") //注入文件内容
private Resource testFile;
@Value("http://www.baidu.com") //注入网址内容
private Resource testUrl;
@Value("${book.name}") //注入属性文件
private String bookName;
@Bean//加载bean
@Conditional(WindowsCondition.class) // 通过@Conditional注解,符合Windows条件则true
@ConditionalOnResource(resources="classpath:windows.ini")//在类路径下是否存在windows.ini文件,存在为true,最后进行注解与操作,为true实例化Bean
public ListService windowsListService(){
return new WindowsListService();
}
@Bean
@ConditionalOnClass(LinuxCondition.class) // 通过@ConditionalOnClass注解,符合Linux条件则true
@ConditionalOnProperty(name = "synchronize", havingValue = "true"))//如果synchronize在配置文件中并且值为true
public ListService linuxListService(){
return new LinuxListService();
}
//加载配置文件中前缀为spring.datasource的属性
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource jwcDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConditionalOnMissingClass({LinuxCondition.class,WindowsCondition.class})//当容器中缺失这两个Class时为true
@Profile("dev")//在dev环境下为true 最后结果为注解和之与,true实例化该Bean
public ListService macListService(){
return new MacListService();
}
}
3. Проверка аннотаций
Аннотация проверки находится в пакете javax.validation:
аннотация | Разобрать | использование |
---|---|---|
@Valid | Запустите проверку, параметр Errors должен следовать за параметром с аннотацией @Valid, аннотация @Valid является параметром для проверки | Можно аннотировать поля, методы, конструкторы, параметры |
@AssertFalse | Аннотируемый элемент должен быть логического типа, а значение равно false. | Можно аннотировать поля, методы, конструкторы, параметры |
@AssertTrue | Аннотируемый элемент должен иметь тип Boolean и значение true. | Можно аннотировать поля, методы, конструкторы, параметры |
@DecimalMax | Аннотируемый элемент должен быть числом, а его значение должно быть меньше или равно заданному значению BigDecimalString. | Можно аннотировать поля, методы, конструкторы, параметры |
@DecimalMin | Аннотированный элемент должен быть числом, а его значение должно быть больше или равно заданному значению BigDecimalString. | Можно аннотировать поля, методы, конструкторы, параметры |
@Digits | Аннотируемый элемент должен быть числом, а его значение должно состоять из указанного количества цифр. | Можно аннотировать поля, методы, конструкторы, параметры |
@Future | Значение аннотированного элемента должно быть датой в будущем. | Можно аннотировать поля, методы, конструкторы, параметры |
@Max | Аннотируемый элемент должен быть числом, а его значение должно быть меньше или равно заданному значению. | Можно аннотировать поля, методы, конструкторы, параметры |
@Min | Аннотируемый элемент должен быть числом, и его значение должно быть больше или равно заданному значению. | Можно аннотировать поля, методы, конструкторы, параметры |
@NotNull | Значение аннотируемого элемента не должно быть нулевым. | Можно аннотировать поля, методы, конструкторы, параметры |
@Null | Значение аннотированного элемента должно быть нулевым. | Можно аннотировать поля, методы, конструкторы, параметры |
@Past | Значение аннотируемого элемента должно быть датой в прошлом. | Можно аннотировать поля, методы, конструкторы, параметры |
@Pattern | Значение аннотируемого элемента должно соответствовать заданному регулярному выражению. | Можно аннотировать поля, методы, конструкторы, параметры |
@Size | Значение аннотируемого элемента должно быть строкой, коллекцией или массивом, а его длина должна соответствовать заданному диапазону. | Можно аннотировать поля, методы, конструкторы, параметры |
4.AOP
4.1 Аннотированное программирование аспектов AspectJ:
Аннотации AspectJ находятся в пакете org.aspectj.
аннотация | Разобрать | использование |
---|---|---|
@Aspect | объявляет, что класс является аспектом | Можно аннотировать классы и интерфейсы |
@After | Метод совета вызывается после того, как целевой метод возвращает или выдает исключение. | Можно аннотировать метод |
@Before | Метод уведомления будет выполнен до вызова целевого метода. | Можно аннотировать метод |
@Around | Метод уведомления будет инкапсулировать целевой метод | Можно аннотировать метод |
@AfterReturning | Метод уведомления будет вызываться после возврата целевого метода. | Можно аннотировать метод |
@AfterThrowing | Метод уведомления вызывается после того, как целевой метод выдает исключение | Можно аннотировать метод |
@Pointcut | Возможность определять многократно используемые точки в аспекте @AspectJ (объявление часто используемых выражений точек через аннотацию @Pointcut) | Можно аннотировать метод |
@annotation | Имеет право на сопоставление точек соединения с указанной аннотацией | Можно аннотировать советы, такие как @After и т. д. |
@EnableAspectJAutoProxy | Включите поддержку Spring для AspectJ в классе конфигурации | Можно аннотировать классы и интерфейсы |
4.2 Индикаторы AspectJ
Индикатор выполнения — самый важный индикатор, который мы используем при написании определений pointcut:
аннотация | Разобрать | использование |
---|---|---|
Индикатор AspectJ | описывать | |
arg() | Ограничивает параметр сопоставления точки соединения методом выполнения указанного типа. | Аннотации, которые можно аннотировать в AspectJ, такие как @After и т. д. |
@args() | Метод выполнения, который ограничивает аннотирование параметров соответствия точки подключения указанной аннотацией, может быть аннотирован в аннотациях AspectJ, таких как @After и т. д. | |
execution() | Выполняется ли точка крепления для метода сопоставления | Аннотации, которые можно аннотировать в AspectJ, такие как @After и т. д. |
this() | Ограничивает точки соединения, соответствующие ссылкам на прокси-компоненты AOP, классами указанного типа. | Аннотации, которые можно аннотировать в AspectJ, такие как @After и т. д. |
Target | Ограничение точки соединения для сопоставления целевого объекта с классом указанного типа может быть аннотировано аннотациями AspectJ, такими как @After и т. д. | |
@target() | Ограничьте точки соединения, чтобы они соответствовали конкретным исполняемым объектам, классы которых должны иметь аннотации указанного типа. | Аннотации, которые можно аннотировать в AspectJ, такие как @After и т. д. |
within() | Ограничить точки соединения, чтобы они соответствовали указанному типу | Аннотации, которые можно аннотировать в AspectJ, такие как @After и т. д. |
@within() | Ограничивает точку соединения, чтобы она соответствовала типу, аннотированному указанной аннотацией (при использовании Spring AOP метод определяется в классе, аннотированном указанной аннотацией) | Аннотации, которые можно аннотировать в AspectJ, такие как @After и т. д. |
4.3 Вариант использования: написание аспектов
@Aspect //声明该类是一个切面
@Component
public class LogAspect {
private final String POINT_CUT ="execution(* org.sping4.ccww.aop.DemoMethodService.*(..))";
@Pointcut("@annotation(org.ccww.sping4.base.aop.Action)") //声明切面
public void annotationPointCut(){};
@After("annotationPointCut()") //声明一个建言,并使用@Pointcut定义的切点
public void after(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Action action = method.getAnnotation(Action.class);
System.out.println("注解式拦截 " + action.name()); //⑤
}
@Before("execution(* org.sping4.ccww.aop.DemoMethodService.*(..))")//声明一个建言,此建言直接使用拦截规则作为参数
public void before(JoinPoint joinPoint){
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
System.out.println("方法规则式拦截,"+method.getName());
}
/**
* 后置返回
* 如果第一个参数为JoinPoint,则第二个参数为返回值的信息
* 如果第一个参数不为JoinPoint,则第一个参数为returning中对应的参数
* returning:限定了只有目标方法返回值与通知方法参数类型匹配时才能执行后置返回通知,否则不执行,
* 参数为Object类型将匹配任何目标返回值
*/
@AfterReturning(value = POINT_CUT,returning = "result")
public void doAfterReturningAdvice1(JoinPoint joinPoint,Object result){
System.out.println("第一个后置返回通知的返回值:"+result);
}
}
5. Spring MVC
аннотация | Разобрать | использование |
---|---|---|
@EnableWebMvc | Некоторые конфигурации по умолчанию будут включены, например некоторые ViewResolver или MessageConverter и т. д. | Можно аннотировать классы и интерфейсы |
@RequestMapping | Он используется для сопоставления веб-запросов (путей доступа и параметров) и обработки классов и методов (то есть для настройки сопоставления между URL-адресами и методами).Путь @RequestMapping, аннотированный в методе, наследует путь, аннотированный в классе. | Можно аннотировать классы, интерфейсы и методы. |
@ResponseBody | Поддержка помещения возвращаемого значения в тело ответа | Может быть аннотирован перед возвращаемым значением или в методе |
@RequestBody | разрешить запрос | Параметры est находятся в теле запроса |
@PathVariable | Используется для получения параметров пути, таких как /ccww/003, может принимать 003 в качестве параметра | Может быть аннотирован перед параметрами |
@RestController | Композиционная аннотация сочетает в себе @Controller и @ResponseBody, что означает, что вам нужно использовать эту аннотацию, когда вы разрабатываете только элемент управления, взаимодействующий с данными страницы. Без этой аннотации для достижения вышеперечисленных функций нужно самому добавить в код две аннотации @Controller и @ResponseBody | Можно аннотировать классы и интерфейсы |
@ModelAttribute | Привяжите параметры запроса к объектам команды, выставьте возвращаемые значения метода @RequestMapping в качестве данных модели и выставьте ссылочные объекты формы в качестве данных модели. | Можно аннотировать методы и параметры |
Пример:
@Controller //声明此类是一个控制器
@RequestMapping("/ccww") //映射此类的访问路径是/ccww
//@RestController // 使用@RestController,声明是控制器,并且返回数据时不需要@ResponseBody
//@RequestMapping("/ccww")
public class DemoAnnoController {
//此方法未标注路径,因此使用类级别的路径/anno;produces可定制返回的response的媒体类型和字符集,或返回值是json对象,则设置porduces="application/json;charset=UTF-8"
@RequestMapping(produces = "text/plain;charset=UTF-8")
public @ResponseBody String index(HttpServletRequest request) { //可接受HttpServletRequest作为参数,当然也可以接受HttpServletResponse作为参数。此处的@ResponseBody用在返回值前
return "url:" + request.getRequestURL() + " can access";
}
@RequestMapping(value = "/demoPathVar/{str}", produces = "text/plain;charset=UTF-8")//
public @ResponseBody String demoPathVar(@PathVariable String str, //接受路径参数,并在方法参数前结合@PathVariable使用,访问路径为/ccww/demoPathVar/xxx
HttpServletRequest request) {
return "url:" + request.getRequestURL() + " can access,str: " + str;
}
//常规的request参数获取,访问路径为/ccww/requestParam?id=1
@RequestMapping(value = "/requestParam", produces = "text/plain;charset=UTF-8")
public @ResponseBody String passRequestParam(Long id,
HttpServletRequest request) {
return "url:" + request.getRequestURL() + " can access,id: " + id;
}
@RequestMapping(value = "/obj", produces = "application/json;charset=UTF-8")
@ResponseBody // 可注解在方法上
public String passObj(DemoObj obj, HttpServletRequest request) {
return "url:" + request.getRequestURL()
+ " can access, obj id: " + obj.getId()+" obj name:" + obj.getName();
}
//映射不同的路径到相同的方法,访问路径为/anno/name1或/anno/name2
@RequestMapping(value = { "/name1", "/name2" }, produces = "text/plain;charset=UTF-8")
public @ResponseBody String remove(HttpServletRequest request) {
return "url:" + request.getRequestURL() + " can access";
}
@RequestMapping(value = "/helloWorld")
//以“user”为名称添加到模型对象中供视图页面展示使用
public String helloWorld(@ModelAttribute User user) {
return "helloWorld";
}
}
6.Spring security
Безопасность Spring для доступа к аутентификации и авторизации пользователей, два ключевых замечания:
аннотация | Разобрать | использование |
---|---|---|
@EnableWebSecurityConfig | Эта аннотация используется вместе с аннотацией @Configuration для аннотации класса типа WebSecurityConfigurer или использует аннотацию @EnableWebSecurity для наследования класса WebSecurityConfigurerAdapter, который составляет конфигурацию Spring Security. | Может быть аннотирован в классе |
@EnableGlobaleMethodSecurity | Безопасность Spring отключает аннотации по умолчанию.Чтобы включить аннотации, вам нужно добавить аннотацию @EnableGlobalMethodSecurity к классу, который наследует WebSecurityConfigurerAdapter, чтобы определить, имеет ли пользователь доступ к методу уровня управления. | Можно прокомментировать класс |
Используйте параметр @EnableGlobaleMethodSecurity, чтобы включить аннотации:
- @EnableGlobalMethodSecurity(securedEnabled=true): включить разрешения фильтрации аннотаций @Secured.
- @EnableGolablMethodSecurity(jsr250Enabled=true): включить разрешения фильтрации аннотаций @RolesAllowed.
- @EnableGlobalMethodSecurity(prePostEnable=true): используйте выражения Spring_EL для управления более точным контролем доступа.
Конкретный анализ открытых аннотаций выглядит следующим образом:
аннотация | Разобрать | использование |
---|---|---|
@Secured | Подтвердите, есть ли у вас разрешение на доступ | по аннотированному методу |
@RolesAllowed | Доступ к методу возможен до тех пор, пока он имеет любой из своих параметров (префикс ROLE_ можно опустить) | Можно аннотировать метод |
@DenyAll | запретить любой доступ | Можно аннотировать метод |
@PermitAll | Разрешить все доступ | Можно аннотировать метод |
@PreAuthoriz | Выполняется до выполнения метода, и здесь можно вызвать параметры метода, а также получить значения параметров | Можно аннотировать метод |
@PostAuthorize | Выполняется после выполнения метода, и здесь может быть вызвано возвращаемое значение метода.Если EL ложно, то метод также был выполнен и может быть откатан | Можно аннотировать метод |
@PreFilter | Он выполняется перед выполнением метода, и здесь можно вызвать параметры метода, а затем значение параметра фильтруется или обрабатывается. Переменная EL filterObject представляет параметр. Если параметров несколько, используйте filterTarget для аннотации параметра | Можно аннотировать метод |
@PostFilter | После выполнения метода его можно фильтровать по выражению по выражению. | Можно аннотировать метод |
Пример:
Две ключевые аннотации @EnableWebSecurityConfig, @EnableGlobaleMethodSecurity:
@Configuration
@EnableWebSecurity//开启webSecurityConfig
@EnableGlobalMethodSecurity(prePostEnabled = true.securedEnabled = true)//可开启多个注解
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
.....
}
Другие примечания:
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")//@Secured注解,匿名访问
public Account readAccount(Long id){
...
}
@Secured("ROLE_TELLER")//@Secured注解具有TELLER访问
public Account readAccount(Long id){
...
}
@PreAuthorize("#userId==authentication.principal.userId or hasAuthority('ADMIN')")
//利用Spring Security的@P标注参数,或者Spring Data的@Param标注参数来接收@PreAuthorize的返回值
public void changPassword(@P("userId")long userId){
...
}
@PreAuthorize("hasAuthority('ADMIN')")//PreAuthorize是否具有admin角色
public void changePassword(long userId){
...
}
6. Spring Boot
аннотация | Разобрать | использование |
---|---|---|
@SpringBootApplication | Основные примечания Spring Boot, комбинация примечаний (@ Configuration, @ EnableAutoConfiguration, @ ComponentScan), в первую очередь для включения автоматической настройки | Аннотировано в классе, интерфейс |
@EnableAutoConfiguration | Разрешить Spring Boot автоматически настроить текущий проект на основе зависимостей пакета jar в пути к классам. | Может быть аннотирован в классе и интерфейсе |
8. В будущем будут обновлены дополнительные аннотации, такие как (тестовый тест, @EnableXXX, весенняя загрузка и весенние облачные аннотации и т. д.)
Вы в порядке, офицеры? Если вам это нравится, проведите пальцем, чтобы нажать 💗, нажмите, чтобы подписаться! ! Спасибо за Вашу поддержку!
Добро пожаловать в публичный аккаунт【Технический блог Ccww], впервые была запущена оригинальная техническая статья