AspectJ anotação de @DeclareParents adicionar um novo método para alvo

     Como todos sabemos, AspectJ pode ser melhorada através de pontos de ligação @ Antes, @ Depois, @ Cerca tais como anotação, hoje jogamos novo comentário @DeclareParents. Um novo método para aumentar o objecto alvo.

  • introdução Cena:

    Agora nós temos uma classe de pato animal, que tem uma função para nadar, mas de repente um dia precisamos implementar um delicioso atributo ingredientes para animais patos. Nós certamente pode ir classe animal pato para adicionar um método, mas ao contrário do único princípio. Podemos alcançar reforçada por AOP.

  • Código hora do show

  Há uma interface animal

pública  interface de animal { 

    vazio mergulho (); 
}

  mais um animal classe de implementação pato

@Repository ( "Animal" )
 público  classe DuckAnimal os implementos Animais { 
    @Override 
    pública  vazio Swim () { 
        System.out.println ( "pato ... gostam de nadar" ); 
    } 
}

  Requerem um método melhorado para alcançar um pato é uma deliciosa comida

pública  interface de Alimentos {
     vazio COMER (); 
} 

@Repository ( "Food" )
 público  classe DuckFood os implementos Food { 
    @Override 
    pública  vazio COMER () { 
        System.out.println ( "pato olhar saboroso ..." ); 
    } 
}

  injeção automática

@ComponentScan ( "com.zjt.springboot.DeclareParents" ) 
@Configuration 
@EnableAspectJAutoProxy 
pública  classe AppConfiguration { 
}

  Declarando um aspecto

@Aspect 
@Component 
pública  classe MyAspect { 

    / ** 
     * com.zjt.springboot.DeclareParents.Animal + representa todos subclasse valorização do animal 
     * 
     * = DuckFood.class defaultImpl representa um novo padrão de classe para adicionar 
     * / 
    as @DeclareParents (valor = " . com.zjt.springboot.DeclareParents.Animal +", defaultImpl = DuckFood classe )
     pública  estática Food Alimentos; 
}

  Depois há a parte emocionante do teste:

público  classe Teste { 

    pública  estáticos  vazios principais (String [] args) { 
        contexto AnnotationConfigApplicationContext =
                 new AnnotationConfigApplicationContext (AppConfiguration. classe ); 
        Animal = (animal) context.getBean ( "animal" ); 
        animal.swim (); 
        Food alimentos = (Food) animal; 
        food.eat (); 

    } 
}

Os resultados do teste:

Patos como a natação. . . 
Patos olhar bom para comer. . .

Conclusão: A partir dos resultados dos testes, descobrimos que somente um Patos animais adquiridos a partir do recipiente, mas você pode obter os ingredientes conjunto de recursos e melhorias!

 

Acho que você gosta

Origin www.cnblogs.com/zjting/p/12540546.html
Recomendado
Clasificación