常用的spring注解解析(附Aop)

今天呢,去看了一下以前用过的注解,因为springboot需要用到啊,那么多注解一下可能有几个想不起来了,去瞄了一瞄总结了一下,都是自我理解的,简单明了的一些话语,麻烦有问题跟我说了我改正。

**
@controller
控制器,应用在MVC层(控制层),这个呢就是被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作,一般用于类声明的上方
在这里插入图片描述

@service
服务,应用在service层(业务逻辑层),用于标注业务层组件
在这里插入图片描述

@Reponsitory
实现dao访问,应用在dao层(数据访问层)

@Component
把普通工具类实例化到spring容器中,相当于配置文件中的Bean,一般不建议使用

@Autowired
自动装配,为Spring提供的注解,由Spring的依赖注入工具(BeanPostProcessor、BeanFactoryPostProcessor)自动注入
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
@Autowired(required=true):当使用@Autowired注解的时候,
其实默认就是@Autowired(required=true), 表示注入的时候,该bean必须存在,否则就会注入失败。 @Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。

@Resource
默认按照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,
如果注解写在setter方法上默认取属性名进行装配。
当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,
如果name属性一旦指定,就只会按照名称进行装配。
@Resource(name=”name”,type=”type”):没有括号内的内容的话,默认byName。与@Autowired工作接近

@Resource和@Autowired
共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

@Configuration
声明当前类是一个配置类(类似于一个Spring配置的xml文件)
在这里插入图片描述

@EnableAutoConfiguration 自动配置

@MapperScan 扫描实体类位置
在这里插入图片描述
@SpringBootApplication = 是一个复合注解
@Configuration + @EnableAutoConfiguration + @ComponentScan。

@EnableConfigurationProperties(User.class):
为带有@ConfigurationProperties注解的Bean提供有效的支持

@ComponentScan
自动扫描指定包下所有使用@Service,@Component,@Controller,@Repository的类并注册

@Bean
简单明了,就是注册
在这里插入图片描述

@Aspect
声明一个切面,定义切面
在这里插入图片描述

@After
在原方法前执行。
@Before
在原方法后执行。
@PointCut
声明切点,即定义拦截方法,确定有哪些方法会被切入
在这里插入图片描述

这里附加一点AOP的知识:

AOP全称:Aspect Oriented Programming。是一种面向切面编程的,利用预编译方式和运行期动态代理实现程序功能统一的一种技术。它也是Spring很重要的一部分,和IOC一样重要。利用AOP可以很好的对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

切面(Aspect):切面是一个关注点的模块化,这个关注点可能是横切多个对象
连接点(Join Point):连接点是指在程序执行过程中某个特定的点
通知(Advice):指在切面的某个特定的连接点上执行的动作
前置通知(Before):在目标方法或者说连接点被调用前执行的通知
后置通知(After):指在某个连接点完成后执行的通知
返回通知(After-returning):指在某个连接点成功执行之后执行的通知
异常通知(After-throwing):指在方法抛出异常后执行的通知
环绕通知(Around):指包围一个连接点通知,在被通知的方法调用之前和之后执行自定义的方法
切点(Pointcut):指匹配连接点的断言。通知与一个切入点表达式关联,并在满足这个切入的连接点上运行
引入(Introduction):引入也被称为内部类型声明,声明额外的方法或者某个类型的字段
目标对象(Target Object):目标对象是被一个或者多个切面所通知的对象
AOP代理(AOP Proxy):AOP代理是指AOP框架创建的对对象,用来实现切面契约(包括通知方法等功能)
织入(Wearving):指把切面连接到其他应用出程序类型或者对象上,并创建一个被通知的对象

Spirng的AOP的动态代理实现机制有两种,分别是:JDK动态代理和CGLib动态代理。简单介绍下两种代理机制。

JDK动态代理
JDK动态代理是面向接口的代理模式,如果被代理目标没有接口那么Spring也无能为力,Spring通过java的反射机制生产被代理接口的新的匿名实现类,重写了其中AOP的增强方法。

CGLib动态代理
CGLib是一个强大、高性能的Code生产类库,可以实现运行期动态扩展java类,Spring在运行期间通过 CGlib继承要被动态代理的类,重写父类的方法,实现AOP面向切面编程。

两者对比:

JDK动态代理是面向接口,在创建代理实现类时比CGLib要快,创建代理速度快。而且JDK动态代理只能对实现了接口的类生成代理,而不能针对类。

CGLib动态代理是通过字节码底层继承要代理类来实现(如果被代理类被final关键字所修饰,那么抱歉会失败),在创建代理这一块没有JDK动态代理快,但是运行速度比JDK动态代理要快。

@Value
值的注入。经常与Sping EL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等等
在这里插入图片描述
在这里插入图片描述

@PathVariable
获取参数,用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。绑定URL模板变量值

@requestParam
主要用于在SpringMVC后台控制层获取参数,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上传的文件;

@Test
测试的注解,右键就能运行所注解的方法。
在这里插入图片描述

@GetMapping
去网页所运行获取到的数据,输入tomcat指令后进入到此html中。提供路由信息,负责URL到Controller中的具体函数的映射。
在这里插入图片描述

@params
指定request中必须包含某些参数值是,才让该方法处理。

@NoArgsConstructor: 自动生成无参数构造函数。
@AllArgsConstructor: 自动生成全参数构造函数。
@Data: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor
在这里插入图片描述

/可以处理跨域请求,让你能访问不是一个域的文件/
@CrossOrigin
/将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据/
@ResponseBody
/* 注解定义全局异常处理类*/
@ControllerAdvice
在这里插入图片描述

就这么点了,还有些不懂还需要继续去探究!!!

猜你喜欢

转载自blog.csdn.net/nan961136007/article/details/86064930
今日推荐