IOC(控制翻转)
概念
把对象的创建、初始化、销毁等工作交给spring容器来做
helloWorld案例

步骤:

1、写一个HelloWorld类
2、写一个配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <!-- 
        beans
            一个bean代表一个类
          所以beans就是很多个类
     -->
     <!-- 
        一个类
        id  标示符   
        class 类的全名
      -->
    <bean id="helloWorld" class="com.itheima09.spring.ioc.helloworld.HelloWorld">
    </bean>
</beans>
3、客户端
    说明:
    Spring容器的作用就是为HelloWorld这个类创建对象
public class HelloWorldTest {
    @Test
    public void testHello(){
        /**
         * 以前的作法:创建对象,并调用
         */
        HelloWorld helloWorld = new HelloWorld();
        helloWorld.hello();
    }

    @Test
    public void testHello_Spring(){
        /**
         * 1启动spring容器
         * 2从spring容器中把对象提取出来
         * 3对象调用方法
         */
        //启动了spring容器了
        ApplicationContext context = 
                new ClassPathXmlApplicationContext("applicationContext.xml");
        //从spring容器中把helloworld对象提取出来
        HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
        helloWorld.hello();
    }
}

这里写图片描述

spring 创建对象的三种方法:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
   <!-- 
        把helloWorld这个类放入到spring容器中 :使用构造函数创建对象
    -->
   <bean id="helloWorld" lazy-init="true"
    class="com.itheima09.spring.ioc.createobject.method.HelloWorld"></bean>

   <!-- 
        引入静态工厂类
        factory-bean  指明工厂bean
    -->
   <bean id="helloWorld2"  lazy-init="true"
        class="com.itheima09.spring.ioc.createobject.method.HelloWorldFactory"
        factory-method="getInstance"></bean>

   <!-- 
        引入实例工厂
    -->
   <bean id="helloWorldFactory" 
    class="com.itheima09.spring.ioc.createobject.method.HelloWorldFactory2"></bean>
   <!-- 
        factory-bean  指向工厂bean
        factory-method  工厂方法
    -->
   <bean id="helloWorld3" factory-bean="helloWorldFactory"  lazy-init="true"
    factory-method="getInstance"></bean>
</beans>
public class HelloWorldTest {
    @Test
    public void testCreateObject_DefaultConstructor(){
        //启动spring容器
        ApplicationContext context =  
                new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
        helloWorld.hello();
    }

    @Test
    public void testCreateObject_StaticFactory(){
        /**
         * 引入静态工厂类 :测试
         */
        ApplicationContext context =  
                new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld2");
        helloWorld.hello();
    }

    @Test
    public void testCreateObject_InstanceFactory(){
        /**
         * 引入实例工厂:测试
         */
        ApplicationContext context = 
                new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld3");
        helloWorld.hello();
    }
}

1.默认构造函数
2.静态工厂
这里写图片描述

3.实例工厂
这里写图片描述

别名:
主要作用:将一个bean 在多个模块中使用不同的别名

  <bean id="helloWorld" class="com.itheima09.spring.ioc.alias.HelloWorld"></bean>

   <alias name="helloWorld" alias="王二麻子"/>

//测试:
@Test
    public void testAlias(){
        //启动spring容器
        ApplicationContext context =  
                new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld helloWorld = (HelloWorld)context.getBean("狗蛋");
        helloWorld.hello();
    }
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐