InversionofControl (abrégé sous forme de CIO)
Autrement dit, lorsque vous avez besoin d'un objet, vous n'avez pas besoin de vous-même manuellement, mais d'autres conteneurs vous fourniront; Le printemps est un conteneur IOC.
Par exemple:
Au printemps, vous devez souvent assembler un DAO en service et utiliser généralement @Autowired Annotation: similaire à ce qui suit
classe publique ServiceImpl {@autowired dao dao; public void getData () {dao.getData (); }Si vous utilisez DAO directement sans initialisation, une exception de pointeur nul sera signalée. La méthode de Spring est de charger les classes requises pour vous par la réflexion.
Voici un exemple qui simule le DI et le IOC de Spring
Écrivez d'abord deux annotations pour simuler le printemps:
L'annotation de l'entité représente le @ service @ cible (elementType.type) de Spring // class @retention (retenderPolicy.runtime) public @Interface Entity {} représente le @ autowrid @ cible (elementType.field) de Spring // @retention (RetentionPolicy.runtime) de la méthode // uniquement des ressources publiques @interface {} Une fois l'annotation établie, deux classes sont créées:
La classe de pluie représente la nécessité d'obtenir des données météorologiques (base de données ou serveur) d'autres endroits.
Classe publique Rain {public Void Rain () {System.out.println ("Raining"); // Je l'ai écrit directement pour plus de commodité}}La classe météo représente les données météorologiques obtenues
@Entitypublic class météo {@Resources Rain Rain; // Voici la pluie publique void weather_rain () {rain.rain (); }Ce qui suit est l'injection directe par la réflexion:
Tout d'abord, parcourez le nom du package spécifié: cette étape est omise en premier.
Tout d'abord, créez une liste pour simuler le conteneur de haricots à ressort, puis toutes les classes initialisées avec annotations d'entité seront initialisées.
classe publique weather_reflect {list <objet> objetList objet; // Simulate Container Public Weather_reflect () {objetList = new ArrayList <Bject> ();} // En fait, la meilleure façon ici est de trouver la classe avec des annotations d'abord, juge les annotations d'entité et les passer directement. ClassNotFoundException, illégalAccessException, InstantiationException, NoSuchMethodexception, invocationTargexception {class <?> Clazz = object.getClass (); if (Clazz.isannotationPresent (entity.class)) {// borde Field: Fields) {if (field.isannotationPresent (Resources.class)) {// jugez si class <?> Rainclass = class.forname (field.getType (). getName (), false, thread.currentThread (). GetContextClassLoller ()); // Ici First the Rain Class Field.Set (Object, Object, Rainclass.Newinstance ()) rainoBjectList.add (objet); // Enfin enregistrer la météo attribuée dans le conteneur}}}}} public List <objet> returnList () {return objectList; // renvoie le conteneur pour une utilisation future}Enfin, il s'agit de simuler directement l'utilisation du contrôleur
Classe publique WeatherPrediction {public static void Main (String args []) lève ClassNotFoundException, NosuchMethodexception, InstantiationException, illégalAccessException, InvocationTargetException {WeatherPrediction WeatherPrediction = New WeatherPrediction (); météo = (météo) Une exception du pointeur nul sera signalée et le conteneur y attribue la variable de pluie, de sorte qu'il peut sortir normalement} / * simuler le processus de démarrage de ressort. En fait, vous pouvez écrire une classe séparément. Cette étape est ce que le conteneur doit faire, et nous n'avons pas à nous en soucier * / objet public springdo () lance classnotfoundException, NoSuchMetoDException, invocationTargetException, instanciationException, illégalaccesxception Weather_reflect.get_ref (Weather); // Nouveau fonctionnement des variables dans sa classe et les mettre dans l'objet d'objet de conteneur = Weather_reflect.returnlist (). get (0); retour objet;} ouvrir la sortie: il pleutIl n'y a pas de nouvelle opération sur la pluie dans la dépréciction météorologique, mais elle peut être utilisée. Cela devrait être l'exemple du CIO le plus simple pour simuler le printemps. Bien sûr, le conteneur IOC de Spring est beaucoup plus puissant que cela, comme la sécurité des fils doit être pris en compte, et divers détails sont nécessaires.
Résumer
Ce qui précède est toute l'explication détaillée de cet article sur la simple mise en œuvre du principe du Spring IOC, j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Explication détaillée des principes du Spring IOC
Une brève compréhension des exemples de Spring, AOP et de code
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!