Вы используете (или определяете), нестандартные аннотации, и по какой причине. Как насчет рекурсивных аннотаций?

Транзакции в Prisma еще не реализованы. Однако в их github есть некоторые проблемы, связанные с этим:

  • Транзакции для нескольких операций ( # 74 )
  • Транзакции для длительных операций с зависимостями между записью операции ( # 3846 )

6
задан Ingo 9 April 2009 в 08:15
поделиться

4 ответа

Во-первых, я не уверен, что вы подразумеваете под рекурсивными аннотациями. Вы имеете в виду аннотации, которые могут содержать ссылки на другие аннотации того же типа? Нечто подобное

@Panel(layout=BorderLayout.class,
    nested={
        @Panel(region=NORTH, layout=FlowLayout.class, ...)
        @Panel(region=SOUTH, layout=FlowLayout.class, ...)
    }
)

(это было бы примером того, где я хотел бы использовать его, если бы это было возможно ...)

Что касается моего использования пользовательских аннотаций (и процессоров): генерация кода.

См. http://code.google.com/p/javadude/wiki/Annotations

Например, свойства JavaBean:

@Bean(
    properties={    
      @Property(name="name"),
      @Property(name="phone", bound=true),
      @Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
    }
)
public class Person extends PersonGen {
    // generated superclass PersonGen will contain getters/setters
    //    field definitions, property change support...
}

или пример добавления

package sample;

import java.util.List;

public interface IFlightAgent {
    List<IFlight> getFlight();
    void reserve(IFlight flight);
}

public interface ICarAgent {
    List<ICar> getCars();
    void reserve(ICar car);
}

public interface IHotelAgent {
    List<IHotel> getHotels();
    void reserve(IHotel hotel);
}

package sample;

import com.javadude.annotation.Bean;
import com.javadude.annotation.Delegate;

@Bean(delegates = {
    @Delegate(type = IHotelAgent.class,
              property = "hotelAgent",
              instantiateAs = HotelAgentImpl.class),
    @Delegate(type = ICarAgent.class,
              property = "carAgent",
              instantiateAs = CarAgentImpl.class),
    @Delegate(type = IFlightAgent.class,
              property = "flightAgent",
              instantiateAs = FlightAgentImpl.class)
    }
)
public class TravelAgent extends TravelAgentGen
    implements IHotelAgent, ICarAgent, IFlightAgent
{
    // generated superclass TravelAgentGen will create instances
    //   of the "instantiateAs" classes and delegate the interface
    //   methods to them
}

См. Недостатки обработки аннотаций в Java? и мой ответ на него для некоторых потенциальных проблем с их использованием.

2
ответ дан 17 December 2019 в 07:09
поделиться

Я недавно использовал аннотации, так как они интенсивно используются Oracle Weblogic Server для модификации поведение веб-сервисов Java. Здесь есть полный список аннотаций, которые они определяют здесь . В частности, я больше всего использую их аннотацию политики , поскольку именно на этом основана их модель безопасности; вы можете увидеть их подробные примеры на их странице документации .

Я никогда не слышал о рекурсивных аннотациях.

1
ответ дан 17 December 2019 в 07:09
поделиться

Я использую нестандартные аннотации, чаще всего для того, чтобы помечать поля класса как цели для рефлексивного процесса, например, кеширования в Вызовы RPC или конкретные процедуры инициализации. У меня никогда не было необходимости в рекурсивных аннотациях, однако ... И я думаю, что есть потенциальная проблема с этим, так как аннотации должны быть обработаны во время определения класса, прежде чем стандартные инициализаторы будут готовы ... что, я думаю, было основным причина ограничить содержание аннотации базовыми типами ...

1
ответ дан 17 December 2019 в 07:09
поделиться

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

javac запрещает рекурсивные аннотации просто потому, что этого требует спецификация. Другое дело, что спецификация должна сказать при последующем обновлении JLS (скажем, для JDK 7).

Так что, пожалуйста, прочтите и проголосуйте за:

http://bugs.sun.com/view_bug.do?bug_id=6264216

0
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: