Quina és la diferència entre el servidor intermediari dinàmic JDK i CGLib?

De la documentació de primavera:

Spring AOP utilitza els proxies dinàmics JDK o CGLIB per crear el servidor intermediari per a un objecte de destinació determinat. (Es prefereixen els proxies dinàmics JDK sempre que tingui una opció).

Si l’objecte de destinació a ser implementat per proxy implementa a l’almenys una interfície, s’utilitzarà un servidor intermediari dinàmic JDK. Totes les interfícies implementades pel tipus de destinació seran intermediari. Si l’objecte de destinació no implementa cap interfície, es crearà un intermediari CGLIB.

Si voleu forçar l’ús de l’intermediari CGLIB (per exemple, per aplicar proxy a cada mètode definit per a l’objecte de destinació, no només als implementats per les seves interfícies), pot fer-ho. No obstant això, hi ha alguns temes a considerar:

els mètodes finals no es poden aconsellar, ja que no es poden anul·lar.

Us cal els binaris CGLIB 2 en la seva ruta de classe, mentre que els proxies dinàmics estan disponibles amb el JDK. Spring li avisarà automàticament quan necessiti CGLIB i les classes de la biblioteca CGLIB no es troben al classpath.

El constructor del seu objecte intermediari serà cridat dues vegades. Aquesta és una conseqüència natural de el model de proxy CGLIB pel qual es genera una subclasse per a cada objecte intermediari. Per a cada instància de servidor intermediari, es creen dos objectes: l’objecte d’intermediari real i una instància de la subclasse que implementa el consell. Aquest comportament no es mostra quan s’utilitzen proxies JDK. En general, trucar a el constructor de l’tipus de proxy dues vegades, no és un problema, ja que generalment només es realitzen assignacions i no s’implementa cap lògica real al constructor.

Leave a Comment

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *