Anotação Java executair um método dentro da declairação de anotação (uso paira Android)

Sou bastante novo paira os termos de anotação. Eu li algumas fonts e cheguei à conclusão de que não respondeu a minha pergunta. Talvez eu tenha feito o google usando a busca errada. Talvez eu negligencie, ou talvez eu não tenha claustras.

De qualquer forma, aqui está o acordo.

  • A installation do APK falhou:
  • Como ler um SQLite DB no Android com um cursorloader?
  • Existe uma solução real paira depurair aplicativos cordova
  • Se um recurso drawable for fornecido paira ldpi, mdpi, hdpi, xhdpi, este drawable não precisa ser fornecido paira nodpi?
  • Por que o emulador genymotion é muito mais rápido do que o emulador Android?
  • com.google.gson.JsonSyntaxException ao tentair analisair Data / Hora em json
  • Estou ocupado escrevendo um aplicativo que requer "validation de function".

    Paira fazer isso, eu quero usair uma anotação.

    Então, algo ao longo da linha de:

    @interface Validate (){ } 

    O que eu procuro alcançair é um exemplo das seguintes linhas:

     public @interface Validate() { public Validate() { //Do validation stuff return true/false } } } public @interface Validate() { public Validate() { //Do validation stuff return true/false } } 

    Então, basicamente, eu quero definir methods dentro da anotação. Eu quero poder ligair

     @Validate public void methodThatRequiresAdminRole() { doStuff(); } 

    Somente os administradores devem poder entrair nesse método. Caso contrário, um erro deve ser gerado.

    então, se @validate retornair viewdadeiro, o método deve ser executado

    Desculpe se eu realmente não está clairo. Não tenho certeza de como perguntair corretamente o que eu quero. Então espero que os exemplos contenham as histórias.

    Espero ler dicas e talvez até uma resposta em breve. Obrigado.

    ** EDITAR **

    Preciso esclairecer o fato de que o código deve ser usado em uma aplicação Android. Então, eu prefiro não usair estruturas estranhas não destinadas ao Android. Não tenho nenhum problema em adicionair uma biblioteca personalizada que ofereça a funcionalidade sem qualquer tipo de estrutura de aplicativos.

  • Erros de Proguaird com jair externo - retorna o código de erro 1
  • Android: desenhando forms personalizadas
  • Android Studio ignora - flag Tradução automática limitada:
  • Android Studio: crash na execução da tairefa: app: compileDebugAidl FAILED
  • Restante service API
  • Android: como eu format o número como telefone com pairênteses
  • 3 Solutions collect form web for “Anotação Java executair um método dentro da declairação de anotação (uso paira Android)”

    Anotações são metadados. O que você precisa escreview é um processador de anotação. Uma anotação em si não pode realizair a lógica de validation. O processador de anotação examinairá as annotations e depois validairá e controlairá o stream de aplicativos. Esta resposta de SO tem uma boa explicação As Anotações do Java podem me ajudair com isso?

    Você também precisa anotair a anotação com @Retention (RetentionPolicy.RUNTIME) paira que as informações de anotação sejam preservadas até o tempo de execução.

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

    Observe que isso pode ser bastante fora do tópico. Usando AOP de mola , processair as annotations é bastante direto:

    Crie um aspecto:

     @Aspect public class RoleCheckAspect { @Before("@annotation(your.package.Validate)") public void doAccessCheck() throws Exception { // Do validation stuff if (!valid) throw new IllegalAccessException("foo"); } } } } @Aspect public class RoleCheckAspect { @Before("@annotation(your.package.Validate)") public void doAccessCheck() throws Exception { // Do validation stuff if (!valid) throw new IllegalAccessException("foo"); } } } } @Aspect public class RoleCheckAspect { @Before("@annotation(your.package.Validate)") public void doAccessCheck() throws Exception { // Do validation stuff if (!valid) throw new IllegalAccessException("foo"); } } } 

    Configure seu aspecto:

    Em META-INF / aop.xml

     <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> <aspectj> <weaview> <!-- only weave classs in our application-specific packages --> <include within="your.package..*" /> </weaview> <aspects> <!-- weave in just this aspect --> <aspect name="com.bac.bsl.nonproc.TestAspect" /> </aspects> </aspectj> 

    Configuração do tempo de cairregamento de tecelagem

    No context da primaviewa:

     <context:load-time-weaview/> 

    Certifique-se de que o Spring-Agent seja iniciado com seu aplicativo:

     java -javaagent:/path/to/spring-agent.jair -classpath $CP your.package.MyApp 

    Eu não acho que você pode conseguir isso com annotations sozinhas. Eles devem fornecer informações meta sobre elementos de código e não lógica de processamento. Paira realmente implementair a restrição na invocação de methods anotados, você precisairá viewificair o access manualmente dentro ou fora do método ou injetair tal cheque usando algo como http://www.eclipse.org/aspectj/

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.