Class Spring AOP@Aspect J:我如何让Aspect访问其他类

Class Spring AOP@Aspect J:我如何让Aspect访问其他类,class,aspectj,spring-aop,aop,Class,Aspectj,Spring Aop,Aop,我对Java和Spring还很陌生。我想知道这是否可能,如果可能,我如何让我的方面应用于多个类,而不必从方面“起作用”的类调用方法 这是我的主课。方面可以处理我直接从这个类调用的任何方法,但不会处理其他类调用的任何其他方法(即使它们不是内部的) 公共类AopMain{ 公共静态void main(字符串[]args){ 字符串选择=“on”; ApplicationContext ctx=新类路径XMLApplicationContext(“spring.xml”); 做{ 试一试{ Syste

我对Java和Spring还很陌生。我想知道这是否可能,如果可能,我如何让我的方面应用于多个类,而不必从方面“起作用”的类调用方法

这是我的主课。方面可以处理我直接从这个类调用的任何方法,但不会处理其他类调用的任何其他方法(即使它们不是内部的)

公共类AopMain{
公共静态void main(字符串[]args){
字符串选择=“on”;
ApplicationContext ctx=新类路径XMLApplicationContext(“spring.xml”);
做{
试一试{
System.out.println(“输入'length'表示长度转换,输入'temperature'表示温度转换,输入'quit'表示退出”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
selection=br.readLine();
if(selection.contentEquals(“长度”)){
LengthService LengthService=ctx.getBean(“LengthService”,LengthService.class);
lengthService.runLengthService();
lengthService.display();
}
else if(selection.contentEquals(“温度”)){
TemperatureService TemperatureService=新的TemperatureService();
temperatureService.runTemperatureService();
temperatureService.display();
}
}
捕获(例外e){
System.out.println(“输入错误”);
}
}而(!selection.contentEquals(“quit”);
}
}
这是转换服务类别之一:

公共类温度服务{
字符串fromUnit=null;
字符串toUnit=null;
双val=0;
双转换=0;
公共无效RunTemperatureService(){
扫描仪输入=新扫描仪(系统输入);
System.out.println(“转换自(输入C,K,F):”;
fromUnit=in.nextLine();
System.out.println(“转换为(输入C、K、F):”;
toUnit=in.nextLine();
TemperatureConverter from=新的TemperatureConverter(fromUnit);
温度转换器至=新温度转换器(toUnit);
System.out.println(“值:”);
val=in.nextDouble();
双塞尔西=从.到塞尔西(val);
转换为.fromcius(celcius);
from.display(val、fromUnit、converted、toUnit);
System.out.println(val+“”+fromUnit+“”=“”+转换+“”+toUnit);
}
公共字符串[]显示(){
String[]displayString={Double.toString(val),fromUnit,Double.toString(已转换),toUnit};
返回显示字符串;
}
}
这是一个转换类:

公共类温度转换器{
最终双C_至F=33.8;
最终双C_至C_=1;
最终双C_至_开尔文=274.15;
私人双重因素;
公共温度转换器(字符串单位){
if(单位为“F”)
系数=C_至F;
否则,如果(单位为C)
系数=C_至C;
else if(单位:K)
系数=C_至开氏度;
}
公共双toCelcius(双测量){
收益计量*因子;
}
来自Celcius的公共双精度(双精度测量){
回报测量/系数;
}
公共温度转换器(){}
公共无效显示(双val、字符串fromUnit、双转换、字符串toUnit){}
}
这是我的配置文件:


我希望能够将一个方面应用于服务类调用的转换器类的函数,但正如我所提到的,如果直接从主类调用方法,它将无法正常工作。(display函数最初是converter类的一部分,但我移动了它,以便该方面能够工作)。另外,为什么方面不接受newline()方法调用

编辑:

这是我的一个方面:

@方面
公共类显示方面{
@返回后(pointcut=“execution(*display(..)”,returning=“retVal”)
公共无效文件设置(对象检索){
System.out.println(“所以我们找到了显示的东西”);
Writer=null;
字符串[]返回数组=(字符串[])返回值;
试一试{
System.out.println(“内部尝试”);
String text=“执行的操作是:“+returnArray[1]+”中的“+returnArray[0]+”是“+returnArray[2]+”“+returnArray[3]+”\n”;
File File=新文件(“Log.txt”);
writer=newbufferedwriter(newfilewriter(file,true));
作者:写(文本);
}捕获(FileNotFoundException e1){
e1.printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
if(writer!=null){
writer.close();
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
我希望能够将一个方面应用于转换器类的函数

那么,更改切入点,以便截取您希望在建议中处理的方法(不是函数,它们称为方法)。目前切入点是

执行(*显示(..)
也就是说,它将拦截所有名为
display
的方法,这些方法具有任意数量的参数和任何返回类型。如果要截取所有转换器方法,请将其更改为

执行(*converter.method.TemperatureConverter.*(..)
相反

正如我所提到的,如果直接从主类调用该方法,它将无法正常工作

我需要猜测,因为这个描述不清楚,但可能你在尝试什么