JavaConfig: Замена aop:advisor и tx:advice

Я задаюсь вопросом, могу ли я нанести на карту эту часть конфигурации xml к Весне JavaConfig:

<?xml version="1.0" encoding="UTF-8"?>


  
     
     
  

  
    
      
      
      
      
      
      
    
  


До сих пор я выяснил, как заменить aop:pointcut с


и

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class AspectConfig
{

  @Pointcut("@within(org.springframework.stereotype.Service)")
  public void serviceAnnotatedClass() {}
}

Какие-либо намеки, как заменить остальных?

8
добавлено отредактировано
Просмотры: 1

2 ответы

Если вы не хотите использовать какой-либо xml вообще, то можно создать отдельный Явский класс конфигурации для аспектов

@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "com.myAspects")
public class AspectConfig {
    //Here you can define Aspect beans or just use @ComponentScan (as above)
    //to scan the @Aspect annotation in com.myAspects package
}

И импорт выше класса конфигурации в вашем главном классе AppConfig

@Configuration
@EnableWebMvc
@Import({ AspectConfig.class })
@ComponentScan(basePackages = { "pkg1", "pkg2", "pkg3" })
public class AppConfiguration extends WebMvcConfigurationSupport {
    //Other configuration beans or methods
}

Теперь создайте свои бобы аспекта

import com.myAspects;
@Component
@Aspect
public class LoggingAspect {

    @Before("execution(* com.service.*.*(..))")
    public void logBefore(){
        System.out.println("before advice called");
    } 

    @After("execution(* com.service.*.*(..))")
    public void logAfter(){
        System.out.println("after advice called");
    } 

}

Можно использовать pointcut наряду с аннотацией совета как показано выше.

5
добавлено

Currently it isn't possible to translate all XML-based AspectJ settings to a Java based configuration. Probably it will never be. The main reason is that Java doesn't support method literals. But there is a workaround, which was first presented here: https://jira.springsource.org/browse/SPR-8148

  1. Continue using by including the relevant xml snippet using @ImportResource
  2. Convert any existing elements to use @Aspect style.

Что касается документация, Я сказал бы, что вы уже почти сделаны с вашей конфигурацией, которую вы описали выше. Просто необходимо изменить вас конфигурация как это:


     

Уезжайте остальным нравится он, и импортируйте тот ресурс:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
@ImportResource("classpath:/aop-config.xml")
public class AspectConfig
{
    @Pointcut("@within(org.springframework.stereotype.Service)")
    public void serviceAnnotatedClass() {}
}

Я надеюсь, что мог помочь...

3
добавлено
спасибо (специально для указания на jira-проблему)!
добавлено автор user871611, источник