AspectJ anotación de @DeclareParents añadir un nuevo método para objetivo

     Como todos sabemos, AspectJ se puede mejorar a través de puntos de conexión @ Antes, Después @, @ Alrededor tales como anotación, hoy jugamos un nuevo @DeclareParents comentario. Un nuevo método para mejorar el objeto de destino.

  • introducción escena:

    Ahora tenemos una clase de pato animal, que tiene una función para nadar, pero de repente un día tenemos que aplicar un delicioso atributo ingredientes para animales patos. Desde luego, podemos ir a la clase de los animales de pato para agregar un método, pero contrario al principio solo. Podemos lograr reforzada por AOP.

  • Código show de la hora

  Hay una interfaz Animal

pública  interfaz Animal { 

    nula de natación (); 
}

  Una clase de implementación más pato animales

@Repository ( "Animal" )
 pública  clase DuckAnimal los implementos animales { 
    @ Override 
    pública  vacío Swim () { 
        System.out.println ( "pato ... como para nadar" ); 
    } 
}

  Requerir un método mejorado para lograr un pato es un alimento delicioso

pública  interfaz de Alimentos {
     nula comer (); 
} 

@Repository ( "Alimentación" )
 pública  clase DuckFood los implementos de Alimentos { 
    @ Override 
    pública  vacío EAT () { 
        System.out.println ( "mirada de pato sabroso ..." ); 
    } 
}

  inyección automática

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

  Declarar un aspecto

@Aspect 
@Component 
pública  clase MyAspect { 

    / ** 
     * + com.zjt.springboot.DeclareParents.Animal representa todo subclase mejora de Animal 
     * 
     * = DuckFood.class defaultImpl representa una nueva clase por defecto para añadir 
     * / 
    los @DeclareParents (valor = " . com.zjt.springboot.DeclareParents.Animal +", defaultImpl = DuckFood clase )
     pública  estática Alimentación Alimentación; 
}

  Luego está la parte más emocionante de la prueba:

pública  clase de prueba { 

    públicas  estáticas  void main (String [] args) { 
        contexto AnnotationConfigApplicationContext =
                 nueva AnnotationConfigApplicationContext (AppConfiguration. clase ); 
        Animales Animal = (Animal) context.getBean ( "animal" ); 
        animal.swim (); 
        Food comida = (Alimentos) de los animales; 
        food.eat (); 

    } 
}

Resultados del ensayo:

Patos como la natación. . . 
Los patos se ven bien para comer. . .

Conclusión: A partir de los resultados de la prueba, se observa que sólo un Patos animales adquiridos desde el contenedor, pero se puede conseguir los ingredientes conjunto de características y mejoras!

 

Supongo que te gusta

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