gpt4 book ai didi

java - Spring 在每个方法调用之前调用方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:56 25 4
gpt4 key购买 nike

有没有什么方法可以在每个方法调用 bean 之前调用一个方法?

我在 Spring 使用 Selenium 和 cucumber 。因此,所有页面都是单例,并且由于我正在使用 @FindBy 注释,所以我想在每次使用页面时调用 PageFactory.initElements(driver, object)。

使用标准页面对象模式,这将通过在构造函数中调用它来完成。

我想避免的是在每个方法中指定这样的方法:

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

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

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

最佳答案

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

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

  1. 通过添加 <aop:aspectj-autoproxy/> 在 Spring 中启用方面在您的 Spring 配置文件中。

  2. 创建一个简单的类并将其注册为一个方面。

来源:

<bean id="myAspect" class="some.package.MyFirstAspect">
<!-- possible properties ... for instance, the driver. -->
</bean>

MyFirstAspect类(class)。请注意,标有 @Aspect注解。在类中,您必须创建一个方法并将其注册为 @Before。建议(建议在方法执行之前、之后或周围运行)。

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`
}
}

更多信息:

关于java - Spring 在每个方法调用之前调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20519594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com