Can we enable or disable Aspect based on value of any flag or through configuration file?

user2758176 picture user2758176 · Apr 2, 2015 · Viewed 12.4k times · Source

I have added following dependency in pom.xml

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.5</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.5</version>
        </dependency>

And enable AspectJ in appContext.xml as follows:

And define aspect as follows:

@Component
@Aspect
public class AuthenticationServiceAspect {


@Before("execution(* com.service.impl.AuthenticationServiceImpl.*(..))")
    public void adviceMethod(JoinPoint joinPoint) {

        if(true){
            throw new Exception();
        }


}

Now I want to disable this AOP so that above code won't get execute? How can I do this?

Answer

Eric Georges picture Eric Georges · Jun 29, 2017

You may use enabling/disabling component with properties with ConditionalOnExpression annotation. When component is disabled the aspect is too.

@Component
@Aspect
@ConditionalOnExpression("${authentication.service.enabled:true}")// enabled by default
public class AuthenticationServiceAspect {
    @Before("execution(* com.service.impl.AuthenticationServiceImpl.*(..))")
    public void adviceMethod(JoinPoint joinPoint) {
        if(true){
            throw new Exception();
        }
    }
}

To disabling the aspect, just add authentication.service.enabled=false to your application.properties.