zoukankan      html  css  js  c++  java
  • 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

      

      

  • 相关阅读:
    【机器学习】作业7: 随机森林
    【机器学习】作业6-EM算法
    【分布式系统】Consistent Hashing
    北京G,计算几何,线段相交
    带权区间调度问题,软件的期中复习
    机器学习期中考复习(md全是证明题)
    hihocoder35 模板场
    缺课两周后的数值计算笔记
    跨域访问设置
    截取视频第一帧图片
  • 原文地址:https://www.cnblogs.com/zhengbin/p/5164729.html
Copyright © 2011-2022 走看看