Helpex - Trao đổi & giúp đỡ Đăng nhập
33

Tôi muốn thêm bộ đánh chặn mvc mùa xuân như một phần của cấu hình Java. Tôi đã có cấu hình dựa trên xml cho việc này nhưng tôi đang cố chuyển sang cấu hình Java. Đối với các thiết bị đánh chặn, tôi biết rằng nó có thể được thực hiện như thế này từ tài liệu mùa xuân-

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleInterceptor());
    }

}

Nhưng thiết bị đánh chặn của tôi đang sử dụng một hạt đậu mùa xuân tự động vào nó như sau-

public class LocaleInterceptor extends HandlerInterceptorAdaptor {

    @Autowired
    ISomeService someService;

    ...
}

Lớp SomeService trông giống như sau-

@Service
public class SomeService implements ISomeService {

   ...
}

Tôi đang sử dụng các chú thích như @Serviceđể quét các bean và chưa chỉ định chúng trong lớp cấu hình là@Bean

Theo hiểu biết của tôi, vì java config sử dụng new để tạo đối tượng, nên spring sẽ không tự động đưa các phụ thuộc vào nó.

Làm cách nào để thêm các bộ chặn như thế này như một phần của cấu hình java?

33 hữu ích 0 bình luận 52k xem chia sẻ
51

Chỉ cần làm như sau:

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    LocaleInterceptor localInterceptor() {
         return new LocalInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeInterceptor());
    }

}

Tất nhiên LocaleInterceptorcần phải được cấu hình như một Spring bean ở đâu đó (XML, Java Config hoặc sử dụng chú thích) để trường liên quan WebConfigđược đưa vào.

Các tài liệu cho tùy biến chung của cấu hình MVC Spring có thể tìm thấy ở đây , và đặc biệt cho đánh chặn thấy này phần

51 hữu ích 5 bình luận chia sẻ
16

Khi bạn xử lý việc tạo đối tượng cho chính mình như trong:

registry.addInterceptor(new LocaleInterceptor());

không có cách nào mà vùng chứa Spring có thể quản lý đối tượng đó cho bạn và do đó thực hiện việc tiêm cần thiết vào của bạn LocaleInterceptor.

Một cách khác có thể thuận tiện hơn cho tình huống của bạn, là khai báo phương thức được quản lý @Beantrong @Configurationvà sử dụng trực tiếp, như sau:

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public LocaleInterceptor localeInterceptor() {
        return new LocaleInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor( localeInterceptor() );
    }
}
16 hữu ích 3 bình luận chia sẻ
12

Cố gắng đưa dịch vụ của bạn vào làm tham số khởi tạo. Nó đơn giản.

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

   @Autowired
   ISomeService someService;

   @Override
   public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleInterceptor(someService));
   }

}

Sau đó, cấu hình lại thiết bị đánh chặn của bạn,

public class LocaleInterceptor extends HandlerInterceptorAdaptor {


     private final ISomeService someService;

     public LocaleInterceptor(ISomeService someService) {
         this.someService = someService;
     }


}

Chúc mừng!

12 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ java spring spring-mvc interceptor , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading