Java ek açıklama tanınmadı

oy
0

Güvenlik kontrolleri için @PreAuthorize kullanarak bir yay önyükleme uygulaması vardır. doğrulama ben gradle görev bootRun yürütmek yoluyla başlarsanız benim uygulamada çalışır. Ben Bahar (standart çalışma konfigürasyonunu kullanarak) Aracı Suite uygulamayı başlatırsanız, güvenlik kontrolleri çalışmaz.

Sorun STS den başlatırken ön provizyon ek açıklama tanınmadığı konusunda olduğunu düşünüyorum. Benim gerçek uygulamayla aynı miras hiyerarşisini kullanarak basit gradle yay çizme uygulaması ile üretebilir.

  • DemoEntity AbstractBaseEntity uzanır BaseDemo uzanır.
  • IEntityService uygulayan DemoService uzanır AbstractService
  • IEntityService uzanır DemoService uygular IDemoService.

İlgili kod geçerli:

public class DemoEntity extends BaseDemo {}
public class BaseDemo extends AbstractBaseEntity {}
public abstract class AbstractBaseEntity {}

public class DemoService extends AbstractService<BaseDemo, DemoEntity> implements IDemoService {
    @Override
    @DemoAnnotation
    public void create(DemoEntity entity) {}
}

public interface IDemoService extends IEntityService<DemoEntity> {}

abstract class AbstractService<B extends AbstractBaseEntity, E extends B> implements IEntityService<E> {
    @Override
    public void create(E entity) {
        throw new UnsupportedOperationException();
    }
}

public interface IEntityService<E> {
    void create(E entity);
}

@Retention(RetentionPolicy.RUNTIME)
public @interface DemoAnnotation {}

Not:

  • Sınıf DemoService üzerinde oluşturmak yöntemi açıklamalı.
  • Bu yöntem AbstractService oluşturan yöntemini geçersiz kılar ve onu IEntityService üzerinde bildirilmiş yöntemi uygular.

Aşağıdaki kod ile yöntem ve bunların açıklamaları yazdırmak.

@SpringBootApplication
public class AnnotationDemoApplication {

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

        for (final Method method : DemoService.class.getMethods()) {
            if (method.getName().contains(create)) {
                System.out.println(Method:  + method.toString());
                final Annotation[] annotations = method.getAnnotations();
                System.out.println(  #Annotations:  + annotations.length);
                for (final Annotation annotation : annotations) {
                    System.out.println(  Annotation:  + annotation.toString());
                }
                System.out.println();
            }
        }
    }
}

gradle görev bootRun ile başlayan, ben şu sonuç almak:

Method: public void com.example.annotationdemo.DemoService.create(java.lang.Object)
  #Annotations: 1
  Annotation: @com.example.annotationdemo.DemoAnnotation()

Method: public void com.example.annotationdemo.DemoService.create(com.example.annotationdemo.AbstractBaseEntity)
  #Annotations: 1
  Annotation: @com.example.annotationdemo.DemoAnnotation()

Method: public void com.example.annotationdemo.DemoService.create(com.example.annotationdemo.DemoEntity)
  #Annotations: 1
  Annotation: @com.example.annotationdemo.DemoAnnotation()

Ek açıklama kalıtım hiyerarşisinde her yöntem için vardır. STS uygulamayı başlatırken, sonuç:

Method: public void com.example.annotationdemo.DemoService.create(com.example.annotationdemo.DemoEntity)
  #Annotations: 1
  Annotation: @com.example.annotationdemo.DemoAnnotation()

Method: public void com.example.annotationdemo.DemoService.create(com.example.annotationdemo.AbstractBaseEntity)
  #Annotations: 0

Method: public void com.example.annotationdemo.AbstractService.create(java.lang.Object)
  #Annotations: 0

Bu demo gerçek uygulamada benim sorunum nedenini çoğalır düşünüyorum. Ben Bahar Boot 2.2.0, Java 11 kullanılarak ve başka hiçbir bağımlılık sahip initializr yaylı projeyi yarattı.

STS bootRun çalışan dışındaki sonuçlar üretir neden kimse, bana söyleyebilir misiniz? Bunun bootRun aynı şekilde davranır böylece benim STS bir parametre veya ayarı eklemek gerekir mi?

Oluştur 24/10/2019 saat 12:55
kaynak kullanıcı
Diğer dillerde...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more