2

В настоящее время работает над весной 3.2.3. Мы разработали одно приложение API с этим уже 2 года. Он работал хорошо. Но по мере того как классы бобов увеличиваются, было исключение из круговой зависимости. Поэтому мы решили, что с изменением default-lazy-init = "true" в application-context.xml. Но это приводит к еще одной проблеме, связанной с @Scheduled, совсем не работает.Spring Annotation Lazy Load

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

applicationContext.xml

<beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans"> 

Класс обслуживания

@Service("notificationService") 
public class NotificationService{ 

    @Scheduled(cron = "0 09 11 * * *") 
    @Async 
    public void sampleNotificaton(){ 

    } 
} 

Попытка добавить @Lazy (ложь) на уровне услуг, но за исключением круговой зависимости все еще имеют место.

Цените свое предложение. Спасибо.

+0

У меня такое же проблема Но Не найдено ни одного решения? – Nilesh

+0

Я бы попытался решить круговую зависимость в первую очередь. Это большой дизайн запаха, и некоторые контейнеры DI не позволяют этого вообще. – luboskrnac

+0

Вы пробовали аннотацию '@ EnableScheduling'? – luboskrnac

ответ

1

Как мы имеем ограничение, чтобы не нарушать циклическую зависимость (которая в основном очень легко решить BTW), я хотел бы попробовать трюк, где, планирование аннотацию будет извлечены в отдельный компонент:

@Component 
public class NotificationScheduler { 
    @Autowired //I prefer contructor injection, but field injection might be needed in this case because or circular dependency 
    private NotificationService notificationService; 

    @Scheduled(cron = "0 09 11 * * *") 
    public void sampleScheduling() { 
     notificationService.sampleNotification(); 
    } 
} 

@Service("notificationService") 
public class NotificationService{ 

    @Async 
    public void sampleNotificaton(){ 

    } 
}