为包中的所有类创建切入点?

问题描述 投票:1回答:2

我必须创建一个可配置的切入点。任何人都可以帮助实现动态切入点。

DynamicPointcut.class

public class DynamicPointcut extends DynamicMethodMatcherPointcut {

    @Value("${custom.logging.basepackage}")
    String basePackage;

    @Override
    public ClassFilter getClassFilter() {
        return new ClassFilter() {

            @Override
            public boolean matches(Class<?> clazz) {
                List<Class<?>> classList = ClassFinder.find(basePackage);
                return classList.stream().anyMatch(x -> x.equals(clazz));
            }

        };
    }

    @Override
    public boolean matches(Method method, Class<?> targetClass, Object... args) {
        if(args.length>0){
            return true;
        }
        return false;
    }

}

ConfigurableAdvisorConfig.class

@Configuration
public class ConfigurableAdvisorConfig {

    @Autowired
    private ProxyFactoryBean proxyFactoryBean;

    @Autowired
    DefaultPointcutAdvisor defaultPointcutAdvisor;

    DynamicPointcut pointcut = new DynamicPointcut();

    NonProductionLoggingAspect advice = new NonProductionLoggingAspect();

    String[] advisor;


    List<Advisor> advisorList = new ArrayList<Advisor>();

    @Bean
    public String[] defaultPointcutAdvisor(){

        defaultPointcutAdvisor.setAdvice(new NonProductionLoggingAspect());
        defaultPointcutAdvisor.setPointcut(new DynamicPointcut());
        advisor = new String[]{"defaultPointcutAdvisor"};
        return advisor;
    }

    @Bean
    public ProxyFactoryBean proxyFactoryBean(){
        proxyFactoryBean.setInterceptorNames(advisor);
        return proxyFactoryBean;
    }

}
java spring spring-aop
2个回答
0
投票

您可以使用静态aspectOf工厂方法连接您的方面(您无法看到该方法,它由aspectj编译器添加)

<bean class="com.YourAspect" factory-method="aspectOf">
<property name="basePackage"
          value="${custom.logging.basepackage}" />

参考:autowiring in aspect


0
投票

在您的场景中使用Spring中的AspectJ支持。

@Aspect
@Component
public class DaoAspect{

    @Pointcut("within(com.xyz..dao.*)")
    public void allDao(){};

    @Before("allDao")
    public void runAdvise(){
        //some code
    }

}
  1. 定义DaoAspect
  2. 使用@EnableAspectJAutoProxy在spring中启用aspectJ支持
  3. 确保您的方面通过组件扫描注册为bean
  4. 在那里,你可以通过这种方式建议特定包装中的所有课程
© www.soinside.com 2019 - 2024. All rights reserved.