** Modèle proxy ** (modèle proxy) 23 types de modèle de conception économique n ° 1, modèle proxy dynamique de type Java. Est-ce un modèle de substitut à une infirmière? Graphiques UML schématiques représentatifs de la surface inférieure:
Participant schématique:
La pointe du cou a fixé une entrée en forme d'outil de trafic "mobile" représentative:
public interface Moveable {
/**
*Distance spécifiée par le mouvement,Depuis kilomètre
* @param km distance mobile
*/
void move(Integer km);
}
Approximativement, la méthode de collusion: Metro, la méthode d'exercice, la méthode de déplacement et la méthode d'observation.
public class Metro implements Moveable {
@Override
public void move(Integer km) {
try {
System.out.println("Metro is moving ...");
Thread.sleep(km * 1000); //Temps de transfert d'imitation
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Toutefois, le proxy de performance: Performance Proxy:
public class PerformanceProxy implements Moveable {
private Moveable m;
public PerformanceProxy(Moveable m) {
this.m = m;
}
@Override
public void move(Integer km) {
long start = System.currentTimeMillis(); //Méthode d'enregistrement Heure de début du réglage
m.move(km); //Réglage de la méthode
long end = System.currentTimeMillis(); //Méthode temps cohésif
System.out.println("Lorsqu'il est porté: " + (end - start)/1000.0); // 计算Lorsqu'il est porté
}
}
Modèle de remplacement de mesure:
public static void main(String[] args) {
new PerformanceProxy(new Metro()).move(5);
}
----Résultats expérimentaux----
Metro is moving ...
Lorsqu'il est porté: 5.005
Terminé l'achèvement de l'exemple de modèle de cet exemple. Mesure de la demande après ce processus favorable schématique Autres outils de transport (Nyokan desk, High 铁) Temps d'exécution, demande Test de mesure auto-réel individuel peu exigeant).
Cet exemple, PerformanceProxy peut mesurer la possession réelle exemple mobile. Député pour d'autres députés, comme Hijiro, un certain point de remplissage de méthode (ordre de réglage de la méthode), l'estampillage Nisshi, etc. Naturellement, c'est une ville de remplacement triviale, et c'est un port mobile pratique, en raison de l'utilisation de l'autre type:
public static void main(String[] args) {
Plane plane = new Plane();
PerformanceProxy pp = new PerformanceProxy(plane);
LoggingProxy lp = new LoggingProxy(PerformanceProxy);
lp.move();
}
État statique adjoint?
Exemple top-top de l'image, Souyoshi Gendai, agent autonome, réédition. Cet exemple, avant l'introduction du processus, le type de substitution du type de substitution, le type de substitution de la phrase .class (phrase du système secondaire), le type de substitution du substitut.
Fonction de proxy dynamique fournie par le standard Java, Agence dynamique En fait, c'est un processus de passage pour le JDK. Exemple de substitut statique de surface générale Substitut dynamique enfant Réalisation:
public static void main(String[] args) {
final Metro metro = new Metro();
Moveable m = (Moveable) Proxy.newProxyInstance(Metro.class.getClassLoader(), //Chargeur de classe de substitution
new Class[]{Moveable.class}, //传 Entrée requise Entrée pratique
new InvocationHandler() { //Methodical InvocationHandler pour le traitement des entrées(Anonyme)
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 1
long start = System.currentTimeMillis();
Object res = method.invoke(metro, args); // 2
long end = System.currentTimeMillis();
System.out.println("Lorsqu'il est porté: " + (end - start)/1000.0);
return res; // 3
}
});
m.move(5);
}
// 1.invoke Nombre moyen de participants proxy Proxy comportemental activatif; méthode
// 2. method.invoke(metro, args)Etc..move(), Cette fonction intermédiaire js somme.call(obj, param)Similaire.
// 3.2 Retour de méthode moyenne, méthode void return null, nombre de base de types, boîte automatique basée sur le type (par exemple, conversion automatique int-kai Integer).
Un test de mesure statique de la surface supérieure peut être obtenu Résultat de substitution statique de la surface supérieure. Les principaux ajustements peuvent être effectués au nom de l'état dynamique. Proxy.newProxyInstance (...)
Il est nécessaire de voir le JDK, et quand il continue, il peut être mesuré.
// env: JDK1.8 / IntelliJ IDEA 15 / macOS Majave
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
Vous pouvez le voir à la fin
#Position de substitution de génération de mouvement
...
|-- com/
| |--sun/
| | |--proxy/
| | | |--$Proxy0.class
...
Surface inférieure 译 译 $ Proxy0.class
Partie suivante 蠁: Peut être vu et agi comme un proxy. Réalisation principale Type d'objet égal, hashCode sum toString Méthode de base Sum Manière mobile de déplacement de la méthode de contact.
// ----- $Proxy0.class
public final class $Proxy0 extends Proxy implements Moveable {
...
public $Proxy0(InvocationHandler var1) throws { super(var1); }
public final void move(Integer var1) throws {
try {
super.h.invoke(this, m3, new Object[]{var1}); // 1
} ...
}
public final boolean equals(Object var1) throws { ... }
public final String toString() throws { ... }
public final int hashCode() throws { ... }
static {
try {
m1 = Class.forName("java.lang.Object").getMethod("equals", new Class[]{Class.forName("java.lang.Object")});
m3 = Class.forName("proxy.lizi.Moveable").getMethod("move", new Class[]{Class.forName("java.lang.Integer")});
...
} ...
}
}
Épée de surface supérieure (1 position) super.h Assistance manuelle Exemple InvocationHandler, m3 peut suivre la méthode de mouvement d'examen minutieux de l'épée. InvocationHandler pour l'ajustement réel InvocationHandler Un exemple de méthode d'invocation. Présentation du temps subventionné Description facile terminée La construction et le processus de proxy dynamique mentionnés ci-dessus:
Remarque: Yu JDK Genroku Approval Comprehensive State Proxy Actual Method: contrôle réflexe de type Java + ASM Classification et méthode de l'état mobile de contrôle réfléchissant, mais pour la limite du contrôle et du réglage; ASM peut être directement actionné par le caractère 节 节 (texte .class), etc.
MyBatis Koichi Subsection Excellent cadre en couches d'endurance, autre support SQL standardisé, projection de haut niveau au-delà de l'histoire de l'existence. Utilisez MyBatis Time General Demand Photograph Mapper.xml Déclaration de placement et de connexion XXXMapper.java, Nyoshita:
<!-- XXXMapper.xml -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="tk.mybatis.simple.mapper.UserMapper">
<select id="selectById" resultMap="userMap">
SELECT * from sys_user where id = #{id}
</select>
<select id="selectAll" resultType="tk.mybatis.simple.model.SysUser">
select id,
user_name userName
from sys_user
</select>
...
</mapper>
// ---- UserMapper.java
public interface UserMapper {
/**
*Identifiant de passe 查 询 户
*
* @param id
* @return
*/
SysUser selectById(Long id);
/**
*查 询 Possédé 户
*
* @return
*/
List<SysUser> selectAll();
}
Méthode de contact Mapper pour un réglage normal, c'est la cause de MyBaits. Principes de base Passer à travers XML Phrasebook Arrangement Re-rooting Mapper Méthode de contact En fait.
Spring Frame Core policy IoC (Inversion of Control) sum AOP (Aspect Oriented Programming). Injection de confiance de type Spring bean (DI: méthode XML passant par Can, méthode de commentaire de style japonais) et autres méthodes en face à face. cglib (Code Generation Library) Principes Génération de mouvement terminée Classe individuelle, classe copie lourde requise Possession de substitution Méthode finale non corrigée, méthode d'utilisation dans la classe de méthode de possession d'enfant Pour le réglage, transversal 耻 辑. Couche inférieure de type cglib, stile ASM utilisé.
Recommended Posts