@Component 定义此方法交由spring bean对象管理并进行搜索查询;
@Autowired 描述一个对象has a属性,通常用作方法注入;注意:一个属性对应着一个注解,不能共享!
@Service 定义一个接口
@Controller bean对象;即交给spring框架去管理;(认为返回值是一个view)
@PreDestroy 注解描述的方法为生命周期销毁方法,此方法所在的对象,假如存储到了spring容器,那这个对象在从spring容器移除之前会先执行这个生命周期销毁方法(prototype作用域对象不执行此方法)
@RequestMapping("/...") 定义url请求的映射,即访问路径,这里的mapping表示映射的意思;
@GetMapping("/...") 等效于 @RequestMapping(value="/...",method = RequestMethod.GET),这个注解描述的方法只能处理Get类型的请求
@ResponseBody 方法返回值不再是一个view,并告诉spring将响应结果转换为json格式字符串,然后写入到http响应体中,最后传输到客户端;
@RestController == @Controller+@ResponseBody;返回值都是字符串;
AOP(面向切面注解,Advice表示通知方法的意思,cache表示缓存的意思)
@Order 用于定义切面执行的优先级,数字越小优先级越高,默认优先级比较低,即@Order(1)>@Order(2)>@Order(3)的这种形式;
@Aspect 声明此对象是一个切面,一般为一个具体的类对象;
@Pointcut 定义一个切入点(多个连接点JoinPoint集合或者多个方法的集合)
@RequiedCahe 此注解描述的方法为切入点方法;
Spring中通过切入点表达式定义具体切入点,其常用AOP切入点表达式定义及说明:
指示符作用
bean
用于匹配指定bean对象的所有方法
within
用于匹配指定包下所有类内的所有方法
execution
用于按指定语法规则匹配到具体方法
@annotation
用于匹配指定注解修饰的方法
bean表达式一般应用于类级别,实现粗粒度的切入点定义,案例分析:
1.bean("userServiceImpl")指定一个userServiceImpl类中所有方法。
2.bean("*ServiceImpl")指定所有后缀为ServiceImpl的类中所有方法。
@annotaion表达式应用于方法级别,实现细粒度的切入点表达式定义,案例分析:
1.@annotation(anno.RequiredLog) 匹配有此注解描述的方法。
2.@annotation(anno.RequiredCache) 匹配有此注解描述的方法。
其中:RequiredLog为我们自己定义的注解,当我们使用@RequiredLog注解修饰业务层方法时,系统底层会在执行此方法时进行日扩展操作。
@Target 用于定义这个注解只能描述的信息,比如只能描述方法,可以在注解后面加括号进行声明(目标对象),即@Target(ElementType.METHOD);
@Retention 这个注解用来声明此方法何时生效,结合括号进行作用声明,即@Retention(RetentionPolicy.RUNTIME);
针对于Advice通知方法的执行时间的一些注解:
@Around 前后都可以执行,注意:有严格顺序要求时使用此注解
@Before 目标方法执行之前执行此方法进行功能增强
@AfterReturning 目标方法没有出现异常顺利结束时执行它
@AfterThrowing 执行目标方法出现异常时执行它
@After 不论目标方法是否执行成功我都要执行它进行功能增强,这个方法一般用作资源的释放;
@Transactional //此注解描述的方法为事务的切入点方法,方法执行之前会开启事务,执行结束后会结束或回滚事务(此注解通常用于在业务层控制事务一体性);指定此类中所有方法为事务的切入点方法。
涉及分页时使用的一些注解:
@Data 用于对类里的私有属性(private)生成get 和 set 方法;
@AllArgsConstructor 为类里添加含全参的构造函数;
@NoArgsConstructor 添加无参的构造函数;
@Slf4j slf4j只是一个日志标准,并不是日志系统的具体实现,作用:1.提供日志接口2.提供获取具体日志对象的方法;
Shiro安全框架涉及的一些注解用法如下:
@Configuration 注解描述的类为一个配置对象,此对象也会交给spring管理;
@RequiresPermissions("...") 注解由shiro框架提供,此注解描述的方法为切入点方法,表示此方法在执行时,需要进行授权,也就是说假如用户拥有访问方法的权限,才可以访问这个方法,("...")括号内的字符串为一个权限标识;
@CrossOrigin 此注解用于表明该对象支持跨域访问,适用场景及用法:
1.controller方法的CORS配置,您可以向@RequestMapping注解处理程序方法添加一个@CrossOrigin注解,以便启用CORS(默认情况下,@CrossOrigin允许在@RequestMapping注解中指定的所有源和HTTP方法):
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
2.其中@CrossOrigin中的2个参数:
origins : 允许可访问的域列表
maxAge:准备响应前的缓存持续的最大时间(以秒为单位)
为整个controller启用@CrossOrigin
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
3.同时使用controller和方法级别的CORS配置,Spring将合并两个注释属性以创建合并的CORS配置;
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin(origins = "http://domain2.com")
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
4.如果您正在使用Spring Security,请确保在Spring安全级别启用CORS,并允许它利用Spring MVC级别定义的配置。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and()...
}
}
5.@CrossOrigin注解不起作用问题分析:
1、是springMVC的版本要在4.2或以上版本才支持@CrossOrigin
2、非@CrossOrigin没有解决跨域请求问题,而是不正确的请求导致无法得到预期的响应,导致浏览器端提示跨域问题。
3、在Controller注解上方添加@CrossOrigin注解后,仍然出现跨域问题,解决方案之一就是:
在@RequestMapping注解中没有指定Get、Post方式,具体指定后,问题解决。
类似代码如下:
@CrossOrigin
@RestController
public class person{
@RequestMapping(method = RequestMethod.GET)
public String add() {
// 若干代码
}
}
第四阶段:
元注解
---定义:修饰注解的注解 称之为 元注解。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ComponentScan(excludeFilters...) 排除过滤器的启动
@Value("${redis.host}") 通过yml文件动态的为属性赋值,此注解一般配合@RestController一起使用,表示当程序启动时,会自动的加载YML配置文件,将数据保存到Spring的内部.之后通过${key}(spel表达式)进行数据的取值
@PropertySource("classpath:/properties/redis.properties")
表示指定配置文件进行加载。
@Accessors (chain = true) 表示链式加载规则,重写了lombok里面的set、get方法,从而可以简化为某一对象进行属性赋值时,可以简化代码编写(user.setId(1).setAge(2).setName("")...);
@RequestParam 当页面传递的参数名称 与 我们后台传入的参数名称不一致时,可以使用此注解 动态接收参数,如:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。