2017-01-23 7 views
5

Я использую Spring Boot, и я хотел бы использовать AspectJ с ним.@EnableAspectJAutoProxy не работает

следующие работы (конечно):

 
@Aspect 
@Component 
public class RequestMappingAspect { 

    @Before("@annotation(org.springframework.web.bind.annotation.RequestMapping)") 
    public void advice(JoinPoint joinPoint) { 
     ... 
    } 
} 

Однако, если @Component удаляется и @EnableAspectJAutoProxy добавляется следующее не работает.

 
@SpringBootApplication 
@EnableSwagger2 
@EnableAspectJAutoProxy 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

Как правильно включить прокси-сервер AspectJ?

+0

С '@ EnableAspectJAutoProxy' вы не используете AspectJ, а на основе прокси-сервера Spring AOP. Но, возможно, это то, чего вы хотите в любом случае. – kriegaex

+2

Конечно, это не сработает ... Я удаляю '@ Component', не будет создан экземпляр аспект, поэтому нет доступных аспектов, поэтому ничего не использовать. Вам нужно как '@ Component', так и' @ Aspect', чтобы заставить его работать (или определить аспект как метод '@ Bean'). В любом случае, экземпляр аспекта должен быть там, чтобы заставить его работать. –

ответ

1

Удивление примерно то же самое, мы закончили тем, что делали что-то похожее на это:

@EnableAspectJAutoProxy(proxyTargetClass = true) 
@Configuration("Main applicationContext") 
@ComponentScan(
    basePackages = {"com.where.ever"}, 
    excludeFilters = {@ComponentScan.Filter(Aspect.class)}) 
public class ApplicationConfiguration { 
    @Bean(autowire = Autowire.BY_TYPE) 
    public SomeAspect someAspect() { 
     return Aspects.aspectOf(SomeAspect.class); 
    } 
    ... 
    ... 
} 

Это позволило нам просто добавить @Aspect -annotation на тех аспектах, которые также проводными их правильно. Возможно, это был бессмысленный ответ, однако он объясняет, как мы решили проблему, а не фактическое решение проблемы. Дайте мне знать, хотите ли вы, чтобы это было удалено.

+0

В этом нет ничего автоматического ... Аспект создается с помощью метода '@ Bean', поэтому, если вы добавляете новый аспект, вам нужно добавить другой метод. –

2

Вам нужно как @EnableAspectJAutoProxy для конфигурации яровой и комбинации @Aspect/@Component аннотаций

@EnableAspectJAutoProxy делает то же самое, как XML на основе < АОП: AspectJ-autoproxy >