SpringAOP基础实战知识------hello!AspectJ (使用IDEA进行编程)
2020-12-13 02:43
标签:method com gas 基金 main sub join php 父类 AspectJ: AspectJ是Eclipse基金组织的开源项目,它是Java语言的一个AOP实现,是最早、功能比较强大的AOP实现之一,对整套AOP机制都有较好的实现,很多其他语言的AOP实现也借鉴或者采纳了AspectJ中的很多设计。在Java领域,AspectJ中的很多语法结构基本上已经成为AOP领域的标准。 1)首先到AspectJ官网下载Jar包:https://www.eclipse.org/aspectj/downloads.php 2)下载完成后双击jar包,开始安装(花费不到2分钟) 3)安装完成后,把 文件夹里面的jar包导入到IDEA的Spring项目的lib文件夹中 添加到项目中: 经过这里已经配置好了! 开始编程: 1)新建一个接口:AtithmeticCalculator 2)建一个接口的实现类:AtithmeticCalculatorImpl 3)一个main方法 :这个时候应该尝试运行,验证Bean的自动装配是否成功,切面的作用就是在不影响原有代码的基础上,添加代码。 4)创建切面: 5)通过配置文件进行配置:springConfig 文件夹: 这时就可以得到运行结果: 最后说一下在这过程中我遇到的问题: AspectJ遇到的坑: 报错信息: 错误代码: 在main方法里边,获取Bean实例的时候,把获取到的对象转换成子类对象。 解决方法1:报这个错,只有一个原因,就是转化的类型不对. 接口过父类的子类,在强制转换的时候,一定要用接口父类来定义。!! 解决方法2:在AOP里面设置proxy-target-class="true"属性 SpringAOP基础实战知识------hello!AspectJ (使用IDEA进行编程) 标签:method com gas 基金 main sub join php 父类 原文地址:https://www.cnblogs.com/Lemonades/p/11050278.html
--------------------------详情请看:https://blog.csdn.net/gavin_john/article/details/80156963 package SpringAOP2;
public interface AtithmeticCalculator {
int add(int i, int j);
int sub(int i, int j);
int mul(int i, int j);
int div(int i, int j);
}
package SpringAOP2;
import org.springframework.stereotype.Component;
@Component
public class AtithmeticCalculatorImpl implements AtithmeticCalculator {
@Override
public int add(int i, int j) {
int result=i+j;
return result;
}
@Override
public int sub(int i, int j) {
int result=i-j;
return result;
}
@Override
public int mul(int i, int j) {
int result=i*j;
return result;
}
@Override
public int div(int i, int j) {
int result=i/j;
return result;
}
}
public class Main {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("springConfig.xml");
//由于AtithmeticCalculatorImpl实现了AtithmeticCalculator接口,所以强制转换必须用父类AtithmeticCalculator来定义
AtithmeticCalculator atithmeticCalculator=(AtithmeticCalculator)context.getBean("atithmeticCalculatorImpl");
int result=atithmeticCalculator.add(1,2);
System.out.println("--------->"+result);
result=atithmeticCalculator.div(8,2);
System.out.println("--------->"+result);
}
}
@Component
@Aspect
class LoggingAspect {
//通过注解配置bean是正确的,下面的代码有错误
@Before("execution(public int SpringAOP2.AtithmeticCalculatorImpl.*(..))")
private void beforeMethod(JoinPoint joinPoint) {
String methodName=joinPoint.getSignature().getName();
Object args[]=joinPoint.getArgs();
System.out.println("方法名:"+methodName+",参数:"+ Arrays.asList(args));
System.out.println("这上面是前置切面啊");
}
@After("execution(public int SpringAOP2.AtithmeticCalculatorImpl.*(..))")
private void afterMethod(){
System.out.println("后置切面啊");
}
}
Exception in thread "main" java.lang.ClassCastException: class com.sun.proxy.$Proxy9 cannot be cast to class SpringAOP2.AtithmeticCalculatorImpl
AtithmeticCalculator atithmeticCalculator=(AtithmeticCalculatorImpl)context.getBean("atithmeticCalculatorImpl");
//由于AtithmeticCalculatorImpl实现了AtithmeticCalculator接口,所以强制转换必须用父类AtithmeticCalculator来定义
AtithmeticCalculator atithmeticCalculator=(AtithmeticCalculator)context.getBean("atithmeticCalculatorImpl");
上一篇:jsp---猜数字游戏,深有感触
下一篇:python-列表
文章标题:SpringAOP基础实战知识------hello!AspectJ (使用IDEA进行编程)
文章链接:http://soscw.com/essay/26155.html