「java切面注解」定义切面的注解
今天给各位分享java切面注解的知识,其中也会对定义切面的注解进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java怎么运用切面编程生成日志
- 2、java切点和切面讲解,主要是干什么的,有什么作用,省代码?高效?务必通俗易懂,跪谢
- 3、springboot 面向切面编程之使用自定义注解
- 4、java spring@AspectJ的作用
- 5、JAVA中service实现类中的@Service(demoService)是什么意思? 求哪位大神指点
java怎么运用切面编程生成日志
1.首先创建一个自定义注解拦截Controller类,代码如下
/**
* 自定义注解 拦截Controller
*/
@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ControllerLog {
String desc() default "";//标示默认打印空
}
2.创建一个打印日志的切面类,引入切面注解@Aspect,
新建方法代码如下:
// Controller层切点
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void recordLog() {
}
@Around("recordLog()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
// ExPatternParser.initLogger();
long start = System.currentTimeMillis();
Object[] args = pjp.getArgs();
String remark = this.getControllerMethodDescription(pjp);
Object retVal = null;
try {
retVal = pjp.proceed();
} catch (Throwable e) {
// TODO Auto-generated catch block
logger.error("请求失败" + e.toString(),e);
remark = remark + "。Exception Cause By " + e.toString();
throw e;
}finally{
long end = System.currentTimeMillis();
long cost = end - start;
//打印访问日志
// Controller中所有方法的参数,前两个分别为:Request,Response
if(args != null args.length 0){
Object o = args[0];
if(o instanceof HttpServletRequest){
HttpServletRequest request = (HttpServletRequest) args[0];
PrintLog.visit(request, cost,remark);
}
}
}
return retVal;
}
/**
* 获取注解中对方法的描述信息 用于Controller层注解
* @param joinPoint切点
* @return 方法描述
* @throws Exception
*/
public static String getControllerMethodDescription(ProceedingJoinPoint joinPoint)
throws Exception {
String targetName = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class targetClass = Class.forName(targetName);
Method[] methods = targetClass.getMethods();
String description = "";
for (Method method : methods) {
if (method.getName().equals(methodName)) {
Class[] clazzs = method.getParameterTypes();
if (clazzs.length == arguments.length) {
ControllerLog controllerLog = method.getAnnotation(ControllerLog.class);
if(controllerLog !=null){
description =
controllerLog.desc();
}
break;
}
}
}
return description;
}
3.然后在每个Controller类上加上注解:
@ControllerLog(desc = "要 打印的日志内容")
java切点和切面讲解,主要是干什么的,有什么作用,省代码?高效?务必通俗易懂,跪谢
切点和通知构成切面;比如现在你想在所有的save方法前加一些相同代码,那你的切点就是save前,然后通知就是你所加的代码,而这两个整体构成一个切面,当你那天突然觉得这段代码需要改一下,那你就可以直接改通知内容,结果是开发效率变高,代码量减少,耦合度降低,你可以参考声明式事务的配置方式来梳理这部分知识,会快一点
springboot 面向切面编程之使用自定义注解
我们知道使用@Pointcut注解定义切点,它的value属性可以是 切点表达式 或者 注解的全限定名 ;若使用注解的方式,直接在目标切入点方法上加上自定义注解即可纳入AOP的管理
在创建自定义注解时有看到三个注解,分别了解它们的作用
我们先来看看这个枚举类java.lang.annotation.ElementType就是定义注解使用的地方。比如 @Target(ElementType.METHOD) 就是只能用在方法上了。不过可以同时指定多个ElementType的属性来达到既可以用在方法上也可以用在类上的目的: @Target({ElementType.TYPE, ElementType.METHOD})
Documented注解表明这个注释是由 javadoc记录的。 如果一个类型声明被注释了文档化,它的注释成为公共API的一部分。
再来看这个枚举类 java.lang.annotation.RetentionPolicy。该类主要功能是定义注解的 生命周期
创建注解类TestAnnotation。里面有一个name参数,默认是no;没错,该注解只能用在方法上,不能用在类、接口;而且是运行时类型的
在目标方法上使用注解
创建切面类
最后重启工程,访问 和
java spring@AspectJ的作用
AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
AspectJ(也就是AOP)的动机是发现那些使用传统的编程方法无法很好处理的问题。考虑一个要在某些应用中实施安全策略的问题。
安全性是贯穿于系统所有模块间的问题,每个模块都需要应用安全机制才能保证整个系统的安全性,很明显这里的安全策略的实施问题就是一个横切关注点,使用传统的编程解决此问题非常的困难而且容易产生差错,这就正是AOP发挥作用的时候了。
@AspectJ 使用了Java5 的注解,可以将切面声明为普通的Java类。
JAVA中service实现类中的@Service(demoService)是什么意思? 求哪位大神指点
因为这是要实现的类的一个对象名而已,比如在一个Student实现类上加@Service(“student”),括号里面就是给实例化后的Student对象取个名字。这是在一个接口有多个实现类的情况下区分实现类的方式。
比如Student实现了Person接口,在controller里面@Autowired Person时,假如这时Person还有另一个实现类User,为了确定实例化Student还是User, @Service括号里面的东西就有用了,
@Autowired
@Qualifier(“student”)
private Person person;
这样就确定实例化了一个Person指向一个Student对象。
扩展资料:
类与对象的关系:
类是创建对象的模板,确定对象将会拥有的属性和方法。
类是对象的抽象化;对象是类的具体化。
类是一种数据类型,是对象的数据类型(不同于int等基本类型:类具有方法)
方法用于定义类的某种行为(或功能),其语法结构如下:
访问控制符 [修饰符] 返回值类型 方法名( [参数] )
方法中的访问控制符用于限制方法在其他类中的使用范围。
访问控制符分为四种:public、protected、友好的和private。
static修饰符用于限制方法的调用方式:
static修饰的方法可以直接使用类名调用也可以使用类创建的对象调用;
非static修饰的方法只能使用类创建的对象调用。
其它常用方法修饰符有final和synchronized
方法返回引用数据类型的数据,则返回值类型必须是返回数据所属的数据类型或者其父类。
方法返回引用数据类型的数据,则返回值类型必须是返回数据所属的数据类型或者其父类。
方法如果有返回值,则必须借助return关键字将数据返回;
首字母必须小写,如果由多个单词组成,从第二个单词开始首字母必须大写;方法名一般由一个动词或者动名词构成。
关于java切面注解和定义切面的注解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。