@Logbackup是我定义的注解名称,logtype和operation是注解接受的自定义参数,上图是日志以注解的方式添加使用的实例。其实实现这一套的方式用到的Java知识也就注解、切面、反射,注解就相当于你在某个方法那里做的标记,切面就是监控这个标记,等遇到这个标记就触发事件,反射就是通过这个标记获取参数和方法。
注解定义,注解都是接口,属性需要像这样写:
@Target({ ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Logbackup {
public String logtype();
public String operation();
}
以这个注解为切面,其实就是找到这个注解触发你自己需要干的事情
@Aspect
@Component
public class LogbackupAOPAspect {
@Pointcut(value = "@annotation(com.founder.cms.annotation.Logbackup)")
private void comein(){}//定义一个切入点
@Resource
protected LogDao logDao;
/**
* Before
* 在核心业务执行前执行,不能阻止核心业务的调用。
* @param joinPoint
*/
/*@Before("comein()")
public void beforeAdvice(JoinPoint point) {
StrUtil.p("-----beforeAdvice().invoke-----");
//获得注释方法签名【方法名+形参】
MethodSignature ms = (MethodSignature) point.getSignature();
Method method = ms.getMethod();
//获取方法上的注释
Logbackup permission = method.getAnnotation(Logbackup.class);
String s = permission.logtype();
StrUtil.p(" 此处意在执行核心业务逻辑前,做一些安全性的判断等等");
StrUtil.p(" 可通过joinPoint来获取所需要的内容");
StrUtil.p("-----End of beforeAdvice()------");
}*/
private String stringconnect(String[] ss){
String s="";
if(ss!=null&&