Вы можете использовать if()
в определении pointcut.
Я создал новый проект AspectJ в Eclipse со следующей структурой пакета:
MyAspect.aj имеет следующий код:
package aspectj;
@Aspect
public class MyAspect {
public static boolean call = true;
public static boolean exec = true;
@Pointcut("if() && call(* *.*(..)) && !within(aspectj..*)")
public static boolean callPointcut(JoinPoint jp) {
return call;
}
@Pointcut("if() && execution(* *.*(..)) && !within(aspectj..*)")
public static boolean execPointcut(JoinPoint jp) {
return exec;
}
@After("execPointcut(jp) || callPointcut(jp)")
public void advice(JoinPoint jp){
System.out.println(jp);
}
}
И GUI.java:
package main;
public class GUI {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI window = new GUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public GUI() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 328, 109);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
final JCheckBox chckbxCall = new JCheckBox("Call");
chckbxCall.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MyAspect.call = chckbxCall.isSelected();
}
});
chckbxCall.setSelected(true);
chckbxCall.setBounds(6, 6, 128, 23);
frame.getContentPane().add(chckbxCall);
final JCheckBox chckbxExecution = new JCheckBox("Execution");
chckbxExecution.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MyAspect.exec = chckbxExecution.isSelected();
}
});
chckbxExecution.setSelected(true);
chckbxExecution.setBounds(6, 41, 128, 23);
frame.getContentPane().add(chckbxExecution);
JButton btnTestbutton = new JButton("testButton");
btnTestbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("button pressed");
}
});
btnTestbutton.setBounds(172, 5, 117, 29);
frame.getContentPane().add(btnTestbutton);
}
}
Надеюсь, что это поможет в качестве доказательства концепции.