Почему не вызывается метод класса AspectBuilder
В main.java создается объект класса Phone, нажатия кнопок (ответ на звонок, сброс звонка) обрабатываются состояниями - States. Применен паттерн Состояние. Пробовал в execution писать вызовы методов Phone - работает, но на State и его дочерние классы нет.
Phone.java
package com.phone;
import org.springframework.stereotype.Component;
import com.state.State;
import com.state.States.*;
@Component
public class Phone {
private State state;
private String number;
private float balance;
String call() {
return state.call();
}
// Some other methods
}
AspectBuilder.java
package com.AOP;
@Component
@Aspect
@EnableAspectJAutoProxy
public class AspectBuilder{
@Before("execution(* com.state.States.*.*())")
public void AspectBefore(JoinPoint jp){
System.out.println("LOGGER: " + jp.getSignature());
}
}
State.java
package com.state;
import ...
@Component
public abstract class State {
public Phone phone;
public State(Phone phone) {
this.phone = phone;
}
public abstract boolean callable();
public abstract String clickAnswer();
public abstract String clickEnd();
public abstract String call();
}
WaitingState.java
package com.state.States;
import ...
@Component
public class WaitingState extends State {
public WaitingState(Phone phone) {
super(phone);
}
@Override
public String call() {
if (phone.getBalance() > 0) {
phone.changeState(new CallingState(phone));
return this.getClass().getName() + " -> call" + " -> CallingState";
} else {
phone.changeState(new BlockedState(phone));
return this.getClass().getName() + " -> call" + " -> BlockedState";
}
}
// Some other methods
}
Ответы (1 шт):
Автор решения: polySladkiy
→ Ссылка
Дело в том, что состояния создаются на старом POJO стиле, а в Spring необходимо создавать их через context, те необходимо пересмотреть подход к решению, чтобы они создавались через context.