Spring 依赖注入

依赖注入(Dependency Injection,简称DI)与控制反转(IoC)的含义相同。

当某个java对象(调用者)需要调用另一个java对象(被调用用者,即被依赖对象)时,调用者采用new 被调用者 的方式创建对象,这样就会导致调用者与被调用者之间的耦合性增加,不利于后期项目的升级和维护。

Spring 依赖注入

使用Spring框架后,对象不再由调用者来创建,而是由Spring容器创建,Spring容器会负责控制器程序之间的关系,而不是由调用者的程序代码直接控制。这样控制权由应用代码转移到了Spring容器,控制权发生了反转,就是Spring的控制反转。

Spring 依赖注入

实现方式

1.创建接口

 package com.itheima.ioc;

public interface UserService {

     public void say();
}

2. 创建实现接口类

package com.itheima.ioc;

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao)
    {
        this.userDao = userDao;
    }
    public void say(){
        this.userDao.say();
        System.out.println("userService say hello world!");
    }
}

3.设置配置文件

<?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-4.3.xsd">

    <bean id="userDao" class="com.itheima.ioc.UserDaoImpI">
        <!-- collaborators and configuration for this bean go here -->
    </bean>
    <bean id="userService" class="com.itheima.ioc.UserServiceImpl">
       <property name="userDao" ref ="userDao"></property>
        <!-- collaborators and configuration for this bean go here -->
    </bean>

</beans>

4创建测试类

package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
    private static ApplicationContext applicationContext;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService  userService = (UserService)applicationContext.getBean("userService");
        userService.say();
        }
    
}

5.执行运行后,控制台输出

Spring 依赖注入