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

  

  

原文地址:https://www.cnblogs.com/zhengbin/p/5164729.html