- 先在pom文件中引入AOP的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 定义注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EntityFieldStuffer {
String key() default "publicField";
}
- 定义切面
@Aspect
@Component
public class DefaultEntityFieldStuffer {
private Logger log = LoggerFactory.getLogger(DefaultEntityFieldStuffer.class);
private static final String ORG_ID = "orgId";
private static final String COMPANY_ID = "companyId";
private static final String CREATE_BY = "createdBy";
private static final String CREATE_TIME = "createdTime";
private static final String UPDATE_BY = "updatedBy";
private static final String UPDATE_TIME = "updatedTime";
private static final String VERSION = "version";
@Autowired
private RedisTemplate redisTemplate;
public DefaultEntityFieldStuffer() {
}
@Pointcut("@annotation(com.boss.xtrain.core.annotation.stuffer.EntityFieldStuffer)")
public void fillPointCut() {
}
@Before("fillPointCut()")
public void before(JoinPoint joinPoint) {
}
@After("fillPointCut()")
public void after(JoinPoint joinPoint) {
}
@Around("fillPointCut()")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] args = joinPoint.getArgs();
Class entity = args[0].getClass();
try {
MethodSignature signature = (MethodSignature)joinPoint.getSignature();
EntityFieldStuffer entityFieldStuffer = (EntityFieldStuffer)signature.getMethod().getAnnotation(EntityFieldStuffer.class);
String key = entityFieldStuffer.key();
Field[] fields = entity.getDeclaredFields();
Map<String, Object> publicField = (Map)this.redisTemplate.opsForValue().get(key);
Field[] var9 = fields;
int var10 = fields.length;
for(int var11 = 0; var11 < var10; ++var11) {
Field field = var9[var11];
field.setAccessible(true);
String fieldName = field.getName();
if ("orgId".equals(fieldName)) {
field.set(args[0], publicField.get("orgId"));
} else if ("companyId".equals(fieldName)) {
field.set(args[0], publicField.get("companyId"));
} else if ("createdBy".equals(fieldName)) {
field.set(args[0], publicField.get("createdBy"));
} else if ("createdTime".equals(fieldName)) {
field.set(args[0], publicField.get("createdTime"));
} else if ("updatedBy".equals(fieldName)) {
field.set(args[0], publicField.get("updatedBy"));
} else if ("updatedTime".equals(fieldName)) {
field.set(args[0], publicField.get("updatedTime"));
} else if ("version".equals(fieldName)) {
field.set(args[0], publicField.get("version"));
}
}
} catch (Exception var14) {
this.log.error("公共字段注解出错\n {}:{}", var14.getMessage());
}
joinPoint.proceed();
}