我在试着理解AspectJ。我想要计算项目中的所有对象初始化(它们是从我指定的类初始化的,而不是一些Java内部的),而我真的不知道如何做到这一点。
假设我有一个名为A和B的类,其中A有A和Ab的子类,B有A和Bb的子类,Bb有Bba的子类。我希望我的方面能够跟踪以这些类为基础创建的对象的每一个初始化,但我并不真正理解如何正确地做到这一点(尽管这应该有点简单)。到目前为止,我有一些类似的东西:
public aspect AspectCounter {
private int objects = 0;
pointcut countObjects() : ini
我正在尝试有条件地创建(初始化)实例。
我有一个接口,有几个类实现了这个接口。(例如名为"itfc“的接口,还有"classA”、"classB“、"classC”类
当我从外面得到一个字符串时,(例如"a"),我想做A的类
所以,它可以这样写:
public class someClass {
itfc interface;
public someClass(String name) {
this.inteface = makeInstanceByName(name);
}
public m
我想用aspectj初始化。
@Aspect
public class TotoAspect
{
@Before("initialization( *.new(..))")
public void test(JoinPoint thisJoinPoint) throws AuditReactiveException
{
System.err.println("I AM HERE");
}
}
但是,这条消息不是用
new ABC();
我为aspectj使用了java代理。
哪里出错了?
我需要编写一个方面(让我们称之为A),它在运行时显示所有已执行的切入点。有没有办法写一个像call(.)这样的切点它直接指向另一个切点而不使用方面的名称?
我编写了一些东西,主要使用对泛型函数和()的调用,这样当一个方面中的函数被称为My方面时,A就会打印一些东西。我觉得这不是一个理想的解决方案,因为我总是需要写出所有方面的名称,并且需要处理很多方面的问题。
public class Main {
public static void main(String[] args) {
ClassA a = new ClassA();
a.methodA();
请考虑以下设置:
public interface IVehicle {
public void start() {}
public void move() {}
public void stop() {}
}
public class RaceCar implements IVehicle {
@Override
@Authenticated(Role.Pilot)
public void start() { /* Logic to start the car. */ }
@Override
@Authenticated(Role.Pi
我试图在切入点中检测带有注释@NFCDisable的类的任何方法。
@NFCDisable
public class MyClass {
//methods
}
我试过这样做:
@Aspect
public class NFCAspect {
@Before("method()")
public void exec() {
//DO SOMETHING
}
@Pointcut("@within(NFCDisable) || @annotation(NFCDisable)")
public vo
我有多个接口,每个接口定义多个方法,如下所示:
public interface X {
void methodX1;
void methodX2(String s);
}
public interface Y {
void methodY1;
void methodY2(int i);
void methodY3(SomeType s);
}
....
当前的方法实现如下:
public class XImpl implements X {
public void methodX1() {
// met
我试图使用pertypewithin.和AspectJ来做单例模式
这是为了教育的目的,以充分理解该条款,我已经使用其他技术,但我不能使它的工作,我希望。
package resourceManager;
//For every Type that extends resource
public aspect ResourcePool pertypewithin(resource+) {
//The resource
public Object cached;
Object around(Object instance): execution( *.ne
我想检索调用方法,其中调用特定的方法。
例子:
我认为的方法是:
public void methodA(int a, int b){...}
在测试方法中以及在程序本身中调用。
@Test
public void testMethodA(
... some code...
objectClassA.methodA(x,y);
)}
Class B {
...
public void methodB(){
objectClassA.methodA(x,y);
}
}
我想得到的是testMethodA和methodB的内部签名,或者至少是签名。
为了做到这一点,我认为Aspe
我定义了两个类
public class A{
public A myMethod(){
return this;
}
}
public class B extends A{
@Override public B myMethod(){
return this;
}
}
还有切入点execution(public A+ A.*(..))。
我感到惊讶的是,这两种方法都是由切入点来选择的。为什么会出现这种情况,即使我没有在myMethod()定义类型的类型名称之后添加加号
如果+已经有匹配的子类型,为什么AspectJ的设计不一致
我有一个方面,它的建议在字段设置时被执行。我希望获得执行通知的方法的注释对象(=设置字段的位置)。有可能吗?
public class WovenClass {
private int value;
@Validated({Group1.class, Group2.class})
public void setField(int value) {
this.value= value; // Advice should weave here and I want pass '@Validated' annotation to Advice.
}
}
我已经编写了AspectJ方面,这些方面执行由方法注释触发的@ have通知。现在我也想做同样的事情,但是字段是注释的,而不是方法。因此,对于下面类的每次方法调用,它必须将accountSummary字段设置为正确的实现。有办法做到这一点吗?我认为在建议之前使用“是最好的方法。”使用CDI不是一个选项-解决方案必须使用AspectJ。
public class PoolableBusinessLogic {
@InjectServiceClientAdapter(legacy=LegacyAccountSummary.class,new=NewAccountSummary.class)