@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 当页面传递的参数名称 与 我们后台传入的参数名称不一致时,可以使用此注解 动态接收参数,如:

特殊场景要求下的动态传入参数进行赋值操作的注解


qintian
4 声望0 粉丝

陌生人,当你看到这里说明你可能遇到难题了!或许有想要放弃、松懈的时候,但你要相信在某一领域潜心深耕,等熬过无人问津的日子,精彩终究会不期而至!最终再说一句:每一个奋斗路上的陌生人,不在于你做了多少“...


引用和评论

0 条评论