Új vagyok az AOP-ban, és lassan elolvasom és megtanulom a SpringAOP-t és az AspectJ-t.
Nem várt példával találkoztam, hogy egy olyan objektumot, amelyet nem babként, hanem egy babként létrehozott gyár hoz létre, az én szempontommal közelítenek, míg én csak azokat az objektumokat várom, amelyeket rugót a SpringAOP vonatkozó szempontjaival kell helyettesíteni.
Hogyan tudja a spring tudni, hogy egy olyan objektumot proxyzzon, amelyet egy gyár hoz létre, amelyet a springnél regisztráltak? Ez azt jelenti, hogy honnan tudná a tavasz, hogy a saját gyáram valójában egy gyár, és a DogShelter.getAngryDog()
által visszaadott objektum egy új objektum, amelyet proxyval kell burkolni, ahelyett, hogy valamilyen meglévő AngryDog
_, amelyet korábban már becsomagoltak egy aspektusproxyval?
Íme a kód:
Tárgy:
public class AngryDog extends Dog {
@Override
public void play() {
System.out.println("AngryDog->play()");
bark();
bite();
}
@Override
public void bark() {
System.out.println("AngryDog->bark()");
}
@Override
public void bite() {
System.out.println("AngryDog->bite()");
}
}
Gyár:
public class DogShelter {
public AngryDog getAngryDog(){
return new AngryDog();
}
}
Vonatkozás:
@Aspect
public class BeforeAllDogMethodsAspect {
@Before("execution(* com.demos.dogs.*.*(..)))")
public void doAccessCheck() {
System.out.println("SpringAOP aspect called!");
}
}
Tavaszi konfig:
/** DogConfig spring configuration */
@EnableAspectJAutoProxy
@Configuration
public class DogConfig {
@Bean
public AngryDog dog() {
return new AngryDog();
}
@Bean
public DogShelter dogShelter(){
return new DogShelter();
}
@Bean
public BeforeAllDogMethodsAspect beforeAngryDogBitesExample(){
return new BeforeAllDogMethodsAspect();
}
}
felhívás:
foo(){
System.out.println("----------------");
System.out.println("Getting a dog from locally created dog shelter. And playing with it");
DogShelter locallyCreatedDogShelter = new DogShelter();
AngryDog dogFromLocalShelter = locallyCreatedDogShelter.getAngryDog();
dogFromLocalShelter.play();
System.out.println("----------------");
System.out.println("Getting a dog from autowired dog shelter. And playing with it");
AngryDog dogFromAutoWiredDogShelter = autowiredDogShelter.getAngryDog();
dogFromAutoWiredDogShelter.play();
}
Kimenet :
----------------
Getting a dog from locally created dog shelter. And playing with it
AngryDog->play()
AngryDog->bark()
AngryDog->bite()
----------------
Getting a dog from autowired dog shelter. And playing with it
SpringAOP aspect called!
AngryDog->play()
AngryDog->bark()
AngryDog->bite()
getAngryDog()
elfogták. 19.10.2015