前语
在咱们编写springcloud微服务项目中咱们会发现许多服务中需求进行对各种技术的重复装备,例如对redis的序列化装备,mybatisplus的主动填充战略和分页插件装备,对验证目标属性合法等,这篇文章我就对这两个装备以自界说注解的方式完成。
在运用aop完成之前,咱们最好要先学习一下什么是aop,了解aop的思想。
这里想要大概了解aop的可以检查知乎上的一篇文章。 # Spring的面向切面编程(AOP)
一、自界说注解的效果
自界说注解的首要效果便是为了减少过滤器、拦截器、装备文件等需求的编写,增强代码的复用性,运用自界说注解咱们就可以只需一个注解完成这些需求的完成。
二、自界说注解的完成
1.引进依靠
完成自界说注解咱们需求添加springboot aop的依靠包, 因为要完成mp的功用咱们也需求导入mp的依靠。 代码如下:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
2.代码完成
因为是在微服务中运用自界说注解,所以需求把自界说注解的完成写在公共模块中,以便其他服务进行调用。
1.annotation层和config层创立(名字恣意)
2.创立注解类(在创立类那边检查)
创立成功后如下
3.在注解类中添加注解
@Target({ElementType.TYPE}) 注解,其中的参数是该自界说注解出现的方位,例如类、字段、办法、接口上等。
@Retention({RetentionPolicy.Runtime}) 注解,是设置该注解什么时候被保留。
@Documented注解,注解是否将包括在JavaDoc中,若包括则成为公共接口的一部分。
@Import注解,是我用来从config层导入代码运用。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(MyMetaObjectHandler.class)
public @interface EnableAutofill
{
}
4.装备文件编写
主动填充
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler
{
/**
* 插入时的填充战略
*/
@Override
public void insertFill(MetaObject metaObject)
{
log.info("start insert fill.....");
this.setFieldValByName("createTime", new Timestamp(System.currentTimeMillis()), metaObject);
}
/**
* 更新时的填充战略
*/
@Override
public void updateFill(MetaObject metaObject)
{
log.info("start update fill.....");
this.setFieldValByName("updateTime", new Timestamp(System.currentTimeMillis()), metaObject);
}
}
分页插件
@EnableAutofill
@EnableMybatisPlusIPage
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(GoodsApplication.class);
}
}
5.自界说注解运用
@EnableAutofill
@EnableMybatisPlusIPage
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(GoodsApplication.class);
}
}
总结
以上便是大学牲的我在微服务项目中通过springboot aop完成自界说注解的过程,若有什么不足请大家仔细指出。