Нужно назвать аспект без конфигурации XML - PullRequest
1 голос
/ 21 мая 2019

Я хочу запустить аспект весной без использования XML-файла. Я написал классы, как показано ниже, и класс AOPTest - это мой тестовый пример junit, который вызывает метод showProducts (), но перед вызовом showProducts () мне нужно вызвать аспект logBeforeV1 (..), который не вызывается в моем коде ниже. Любые вклады будут оценены.

package com.aop.bl;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@ComponentScan(basePackages="com.aop.bl")
@EnableAspectJAutoProxy
public class MyBusinessLogicImpl {
    public void showProducts() {
        //business logic
        System.out.println("---show products called from business layer----");
    }
}
package com.aop.bl;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyAspect {
    @Before("execution(* com.aop.bl.MyBusinessLogicImpl.showProducts(..))") // point-cut expression
    public void logBeforeV1(JoinPoint joinPoint) {
        System.out.println("------------calling showProducts() from MyAspect---------------: ");
    }
}
package com.aop.test;
import org.junit.Test;
import com.aop.bl.*;

public class AOPTest {
    @Test
    public void test() {
        MyBusinessLogicImpl myObj = new MyBusinessLogicImpl();
        myObj.showProducts(); 
    }
}

Мой вывод такой, как показано ниже:

---show products called from business layer----

Ожидаемый результат:

------------calling showProducts() from MyAspect---------------:
---show products called from business layer----

Примечание. Я включил аспект, используя @EnableAspectJAutoProxy

1 Ответ

0 голосов
/ 21 мая 2019

Ваш юнит-тест запущен вне контекста Spring, поэтому вам необходимо импортировать вашу конфигурацию

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = { MyBusinessLogicImpl.class })
public class AOPTest {
    ...
}
...