• Spring学习之Ioc


    Ioc原理讲解:http://www.cnblogs.com/xdp-gacl/p/4249939.html

    Ioc

      IoC是一种编程思想,由主动编程变为被动接收。

      也就是说,所有的组件都是被动的(passive),所有的组件初始化和调用都由容器负责。组件处在一个容器中,由容器负责管理。

      Ioc容器实现了对象的生命周期管理,降低了组件间的耦合度,将耦合推迟到了配置文件中,实现了软件各层间的解耦。

    Ioc控制反转

      控制的内容:

        指谁来控制对象的创建,传统的应用程序对象的创建是由程序本身控制的。使用Spring后,是由Spring容器来创建对象的。

      反转:

        正转指程序本身来创建,反转指程序本身不去创建对象,而变为被动接收的对象。

      总结:

        控制反转--别名(依赖注入)

            依赖注入--Dependency Injection
              依赖:指bean对象创建依赖于容器。Bean对象的依赖资源
              注入:指bean对象依赖的资源由容器来设置和装配

        以前对象是由程序本身来创建,使用Spring后,程序变为被动接收Spring创建好的对象。

        即应用本身不负责依赖对象的创建及维护,而是由外部容器负责,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

    Spring Ioc搭建

      

    Ioc应用

      1.项目数据库的切换

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <beans xmlns="http://www.springframework.org/schema/beans"
     4          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5          xmlns:aop="http://www.springframework.org/schema/aop"
     6          xmlns:tx="http://www.springframework.org/schema/tx"
     7          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
     8            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
     9            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    10     
    11     <!-- 数据库变换 -->
    12     <bean id="userdao_mysql" class="dao.UserDaoMysqlImpl"/>
    13     <bean id="userdao_oracle" class="dao.UserDaoOracleImpl"/>
    14 </beans>
    applicationContext.xml
     1 package test;
     2 
     3 import org.springframework.beans.factory.BeanFactory;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 import dao.UserDao;
     7 
     8 public class Test {
     9     public static void main(String[] args) {
    10         BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    11         UserDao userDao_mysql = (UserDao)factory.getBean("userdao_mysql");
    12         userDao_mysql.add();
    13         UserDao userDao_oracle = (UserDao)factory.getBean("userdao_oracle");
    14         userDao_oracle.add();
    15     }
    16 }
    Test.java

      

      2.类初始化赋值

        

        

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <beans xmlns="http://www.springframework.org/schema/beans"
     4          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5          xmlns:aop="http://www.springframework.org/schema/aop"
     6          xmlns:tx="http://www.springframework.org/schema/tx"
     7          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
     8            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
     9            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    10 <!-- 类赋值 -->
    11     <bean id="user" class="entity.User">
    12         <property name="name" value="Tom2"/>
    13         
    14         <!-- 集合 -->
    15         <property name="users">
    16             <list>
    17                 <value>Zhengbin1</value>
    18                 <value>Zhengbin2</value>
    19             </list>
    20         </property>
    21     </bean>
    22     
    23     <!-- ref 用来引用类
    24          一个 教师 负责多个 学生 -->
    25     <bean id="teacher" class="entity.Teacher">
    26         <property name="user" ref="user"/>
    27     </bean>
    28 </beans>
    applicationContext.xml
     1 package test;
     2 
     3 import org.springframework.beans.factory.BeanFactory;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 import entity.Teacher;
     7 import entity.User;
     8 
     9 public class Test1 {
    10     public static void main(String[] args) {
    11         BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
    12         User u = (User)beanFactory.getBean("user");
    13         System.out.println(u.getName());
    14         System.out.println(u.getUsers());
    15         
    16         Teacher t = (Teacher)beanFactory.getBean("teacher");
    17         System.out.println(t.getUser().getName());
    18     }
    19 }
    Test1.java

      输出:

        

      

      3.Ioc的类初始化与单例模式

        

        

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <beans xmlns="http://www.springframework.org/schema/beans"
     4          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5          xmlns:aop="http://www.springframework.org/schema/aop"
     6          xmlns:tx="http://www.springframework.org/schema/tx"
     7          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
     8            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
     9            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    10     
    11 <!-- scope 定义bean是否是单例
    12          如果为 singleton 则在 BeanFactory 作用范围内,只维护此Bean的一个实例
    13          如果为 prototype(原型) 则在 BeanFactory 将为每次Bean请求创建一个新的Bean实例 -->
    14     <bean id="clazz" class="entity.Clazz" lazy-init="true" scope="prototype">
    15         <property name="name" value="zhengbin"/>
    16     </bean>
    17 </beans>
    applicationContext.xml
     1 package test;
     2 
     3 import org.springframework.beans.factory.BeanFactory;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 import entity.Clazz;
     7 
     8 public class Test2 {
     9     public static void main(String[] args) {
    10 //        Spring 默认情况下,在读取配置文件时,已经完成创建对象,提高了系统性能
    11         BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
    12         System.out.println("--------------");
    13         Clazz c = (Clazz)beanFactory.getBean("clazz");
    14         Clazz c1 = (Clazz)beanFactory.getBean("clazz");
    15         System.out.println(c.getName());
    16         System.out.println(c1.getName());
    17         System.out.println(c==c1);
    18         c.setName("ZhengBin");
    19         System.out.println(c.getName() + "----" + c1.getName());
    20     }
    21 }
    Test2.java

      

      

  • 相关阅读:
    Python基础之subprocess
    Python基础之读取ini文件
    Python如何将py文件打包成exe
    C++第四十一篇 -- 安装成功的第一个驱动文件
    C++第四十篇 -- 研究一下Windows驱动开发(三)-- NT式驱动的基本结构
    C++第三十九篇 -- 研究一下Windows驱动开发(二)-- 驱动程序中重要的数据结构
    C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载
    C++第三十七篇 -- 调试驱动程序
    iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”解决办法
    Serv-U无法上传“中文文件夹”的问题(没有权限)
  • 原文地址:https://www.cnblogs.com/zhengbin/p/5164729.html
Copyright © 2020-2023  润新知