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!