Java Jegyzet nem ismeri

szavazat
0

Van egy tavaszi indító alkalmazást @PreAuthorize biztonsági ellenőrzéseket. Az érvényesítési működik én kérelmet, ha elindítom a végrehajtó a Gradle feladat bootRun. Ha elkezdem az alkalmazást a tavaszi Tool Suite (standard run konfiguráció), a biztonsági ellenőrzések nem működnek.

Azt hiszem, a probléma az, hogy a ellenőriztesse kommentár nem ismeri fel, amikor kiindulva STS. Azt lehet reprodukálni egy egyszerű Gradle tavaszi indító alkalmazást ugyanazon öröklési hierarchia az igazi alkalmazás.

  • DemoEntity nyúlik BaseDemo, amely kiterjeszti AbstractBaseEntity.
  • „DemoService” kiterjeszti „AbstractService”, amely megvalósítja „IEntityService”
  • DemoService munkaeszközök IDemoService, amely kiterjeszti IEntityService.

Itt látható a megfelelő kód:

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 {}

Jegyzet:

  • Azt jegyzetekkel a „create” módszer az osztály DemoService.
  • Ez a módszer felülbírálja a „create” módszer AbstractService és végrehajtja a módszer, amely fel van tüntetve IEntityService.

Rányomtathatom a módszerek és jelölések az alábbi kódot.

@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();
            }
        }
    }
}

Amikor kezdve a Gradle feladat bootRun, kapok a következő eredménnyel:

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()

A kommentár van minden módszer az öröklési hierarchiában. Amikor elindítja az alkalmazást STS, az eredmény:

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

Azt hiszem, ez a demo átveszi az oka a probléma a valós alkalmazást. Én hoztam létre a projekt rugós initializr segítségével Spring boot 2.2.0, Java 11 és nincs más függőséget.

Tud valaki mondja meg, miért STS termel más eredményt, mint a futás bootRun? Muszáj, hogy egy paraméter-beállítás vagy az én STS úgy, hogy ugyanúgy viselkedik, mint bootRun?

A kérdést 24/10/2019 12:55
a forrás felhasználó
Más nyelveken...                            

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