Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在每次方法调用之前调用Spring方法_Java_Spring_Spring Aop - Fatal编程技术网

Java 在每次方法调用之前调用Spring方法

Java 在每次方法调用之前调用Spring方法,java,spring,spring-aop,Java,Spring,Spring Aop,在bean的每个方法调用之前,有没有办法调用一个方法 我用硒和黄瓜搭配春天。所有页面都是单例的,因为我使用@FindBy注释,所以每次使用页面时我都要调用PageFactory.initElements(驱动程序、对象) 使用标准页面对象模式,可以通过在构造函数中调用它来实现 我想避免的是在每个方法中指定如下方法: public void clickThis() { PageFactory.initElements(driver, this) ... } public void

在bean的每个方法调用之前,有没有办法调用一个方法

我用硒和黄瓜搭配春天。所有页面都是单例的,因为我使用@FindBy注释,所以每次使用页面时我都要调用PageFactory.initElements(驱动程序、对象)

使用标准页面对象模式,可以通过在构造函数中调用它来实现

我想避免的是在每个方法中指定如下方法:

public void clickThis() {
    PageFactory.initElements(driver, this)
    ...
}

public void clickThat() {
    PageFactory.initElements(driver, this)
    ...
}

我不想返回新页面,因为它们将无法在功能之间共享。

正如kocko提到的,您可以使用


除此之外:我不确定我是否正确理解了您,但您真的需要在每次方法调用中调用initElements吗?或者就在您创建页面时。在后面的例子中,我建议创建一个抽象页面,在其中调用initElements方法并从中继承其他页面。

Spring具有强大的AOP支持,您可以从中获益

为了解决你的问题,你必须做的是

  • 通过添加

  • 页面的状态自第一次创建以来可能已更改。例如,菜单被切换,为了在java类中获得更新的WebElements,我必须再次使用initElements.Hmm,但我需要引用该类的实际实例。我想跳过@FindBy注释,并在每次单击时使用driver.findElement(通过选择器)。感觉是最“可读”的解决方案。不,您没有引用实际的实例。注释为您做到了这一点。我的意思是,我要运行的代码需要对实例的引用。initElements(driver,this)很好……您可以通过在方面中注入属性来处理这个问题,而不是通过传递
    this
    来传递注入的属性。
    <bean id="myAspect" class="some.package.MyFirstAspect">
       <!-- possible properties ... for instance, the driver. -->
    </bean>
    
    package some.package;
    import org.aspectj.lang.annotation.Aspect;
    
    @Aspect
    public class MyFirstAspect {
        @Before("execution(* some.package.SomeClass.*(..))")
        public void initElements() {
            //your custom logic that has to be executed before the `clickThis`
        }
    }