Spring学习02 (IOC控制反转)

IOC(控制反转)

控制反转(IOC):以前传统的java开发模式中,当需要一个对象时我们,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。实例化一个java对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用spring时我们就不需要关心通过何种方式实例化一个对象,spring通过控制反转机制自动为我们实例化一个对象。
简单的说,控制反转就是将对象的创建由之前的new创建,交给Spring进行管理。

Bean实例化的3中方式:

项目结构如下:

 1、使用类构造器(无参构造器)(常用,重点掌握)
在applicationContext.xml配置文件中配置:
<?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.xsd">

    <!-- id为唯一标识 class标识要实例化的对象 -->
    <bean id="beanOne" class="com.gxj.two.BeanOne" ></bean>

</beans>
实例化对象:
package com.gxj.two;

public class BeanOne {
    public void add(){
        System.out.println("岁月如歌!");
    }

}
测试:
package com.gxj.two;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanOneTest {
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("com/gxj/two/applicationContext.xml");
        BeanOne beanOne = (BeanOne) context.getBean("beanOne");
        beanOne.add();
    }
}

输出结果:这里写图片描述

2、使用静态工厂创建(了解)
在applicationContext.xml配置文件中配置:
<bean id="beanTwo" class="com.gxj.two.BeanTwoFactory"  factory-method="getBeanTwo"></bean>
静态工厂类:
package com.gxj.two;

public class BeanTwoFactory {
    public static BeanTwo getBeanTwo() {
        System.out.println("岁月如歌!");
        return new BeanTwo();
    }
}
实例化对象:
package com.gxj.two;

public class BeanTwo {

    public void add() {
        System.out.println("时光静好!");
    }

}
测试:
package com.gxj.two;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanTwoTest {
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("com/gxj/two/applicationContext.xml");
        BeanTwo beanTwo = (BeanTwo) context.getBean("beanTwo");
        beanTwo.add();
    }
}
注意:使用静态工厂创建对象时,在工厂中静态方法的static不能省略。配置文件中的factory-method的属性值跟静态方法的方法名一致。
3、使用实例工厂进行创建(了解):

将对象的创建交给工厂类,跟静态工厂创建是类似的,但是配置不同
    在applicationContext.xml配置文件中配置:
    <!-- 利用实例工厂创建对象  要先创建工厂对象  注:工厂的id和factory-bean的值一致。-->
     <bean id="BeanFactory" class="com.gxj.two.BeanThreeFactory"></bean>
     <bean id="beanThree" factory-bean="BeanFactory" factory-method="getBeanThree"></bean>
实例工厂类:
package com.gxj.two;

public class BeanThreeFactory {
    public BeanThree getBeanThree() {
        System.out.println("明日待明日,明日何其多。");
        return new BeanThree();
    }

}
实例对象:
package com.gxj.two;

public class BeanThree {
    public void add() {
        System.out.println("我生待明日,万事成蹉跎!");
    }

}
测试:
package com.gxj.two;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanThreeTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("com/gxj/two/applicationContext.xml");
        BeanThree beanThree = (BeanThree) context.getBean("beanThree");
        beanThree.add();
    }

}

结果:这里写图片描述

bean标签的常用属性:

    id:起名称,id属性值名称任意命名,但是不能包含特殊符号,且必须唯一
    class:要实例的对象所在类的全路径
    name:用的少,功能和id一样,name属性可以包含特殊符号。
    scope:bean的作用范围 ,设置单例或者多例。
        singleton:单例(只能创建一个对象,默认),多次创建使用同一个地址,也就是说创建的是同一个对象。
        prototype:多例,多次创建,创建的是多个对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值