IOC实例

本文介绍了Spring框架中的控制反转(IoC)概念及其核心——依赖注入(DI)。详细阐述了通过setter方法、构造器和接口等方式实现依赖注入的过程,并通过XML配置文件展示了具体的实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制反转:
被调用者的实例创建工作不再由调用者来创建而是由Spring来创建,控制权由应用代码转移到了外部容器,控制权发生了反转,因此称为控制反转。
DI(依赖注入)是实现IoC的一种方法
1.setter
    原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法;
“让ioc容器调用该setter方法”,将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性
2·构造器
    原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数。ioc容器解析时,实例化目标对象时会自动调用构造方法,
ioc只需要为构造器中的参数进行赋值;将ioc实例化的依赖对象作为构造器的参数传入。

接口注入
    原理 : 为依赖对象提供一个接口实现,将接口注入给目标对象,实现将接口的实现类注入的效果。比如HttpServletRequest  HttpServletResponse接口
    
    注意:这是ioc提供的方式,spring中的ioc技术并没有实现该种注入方式

方法注入
    原理 : 在目标对象中定义一个普通的方法,将方法的返回值设置为需要注入的依赖对象类型。
    
    通过ioc容器调用该方法,将其创建的依赖对象作为方法的返回值返回给目标对象。 
案例
<?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">
    <!-- 通过bean元素声明需要Spring创建的实例。该实例的类型通过class属性指定,
    并通过id属性为该实例指定一个名称,以便于访问 -->
    <bean id="helloSpring" class="main.hello.HelloSpring">
        <!-- property元素用来为实例的属性赋值,此处实际是调用setWho()方法实现赋值操作 -->
        <property name="who">
            <!-- 此处将字符串“Spring”赋值给who属性 -->
            <value>Spring</value>
        </property>
    </bean>
</beans>

public class HelloSpring {
    //定义who属性,该属性的值将通过Spring框架进行设置
    private String who = null;
    
    public String getWho() {
        return who;
    }

    public void setWho(String who) {
        this.who = who;
    }
    /**
     * 定义打印方法,输出一句完整的问候
     */
    public void print(){
        System.out.println("Hello,"+this.getWho()+"!");
    }
}

@Test
    public void test() {
        //通过ClassPathXmlApplicationContext实例化Spring的上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过ApplicationContext的getBean()方法,根据id来获取Bean的实例
        HelloSpring helloSpring = (HelloSpring) context.getBean("helloSpring");
        //执行print()方法
        helloSpring.print();
    }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值