Spring-DI控制反转和IOC依赖注入

Spring-DI控制反转和IOC依赖注入

DI控制反转实例

IDEAJ自动导入Spring框架

IDEAJ自动生成Spring目录

建立UserDao.java接口
public interface UserDao {
    public void say();
}
建立UserDaoImpl.java继承UserDao.java并重写say()方法
public class UserDaoImpl implements UserDao{
    @Override
    public void say() {
        System.out.println("i am a UserDaoImpl");
    }
}
建立SpringBean配置文件ApplicationContext.xml

这个温江,至关于花名册,Spring中的Bean所有须要在这里注册,当遇到实例化某个Bean时,只须要翻开花名册,根据它的name来获取Bean的实例。java

<?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 id = "userDao"  class="UserDaoImpl"></bean>
</beans>
建立DI的测试类TestDI.java并实例化userDao对象

ApplicationContext类是Spring中的org.springframework.context.BeanFactory的子接口,是Spring中的Bean实例加工厂。程序员

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

public class TestDI {
    ApplicationContext applicationContext =
            new ClassPathXmlApplicationContext("ApplicationContext.xml");
    UserDao userDao = (UserDao) applicationContext.getBean("userDao");
    @Test
    public void testDI() {
        userDao.say();
    }
}
测试testDI()方法

经过JUnit4运行testDI()方法,运行结果以下:spring

运行结果.png

总结

控制反转(DI)本质上是一种建立实例化对象的方式,经过控制反转,程序员不须要经过new关键字来建立对象,而是直接经过对象的名字从BeanFactory的子接口ApplicationContext中取出实例化好的对象,BeanFactory本质上是Spring中容器。app

依赖注入

建立UserService.java接口
public interface UserService {
    public void  say();
}
建立UserServiceImpl.java继承UserService.java并重写say()方法
public class UserServiceImpl implements UserService{
    @Override
    public void say() {
        System.out.println("i am a UserServiceImpl !");
    }
}
UserServiceImpl.java中声明UserDao对象,并生成setUserDao()方法注入UserDao对象
public class UserServiceImpl implements UserService{

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void say() {
        userDao.say();
        System.out.println("i am a UserServiceImpl !");
    }
}
ApplicationContext.xml文件中配置UserServiceImpl
<?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 id = "userDao"  class="UserDaoImpl"></bean>
       <!-- 将id为uerDao的Bean实例注入到userService实例中 -->
       <bean id = "userService" class="UserServiceImpl" >
              <!-- property标签调用userService实例中的setUserDao方法实现依赖注入 -->
              <property name="userDao" ref="userDao"></property>
              <!-- name属性表示userService实例中的属性名称,
                   ref属性表示userService实例中的属性值 -->
       </bean>
</beans>
建立IOC的测试类TestIOC.java并实例化userService对象
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIOC {
    
    ApplicationContext applicationContext =
            new ClassPathXmlApplicationContext("ApplicationContext.xml");
    UserService userService = (UserService) applicationContext.getBean("userService");
    @Test
    public void testIOC() {
        userService.say();
    }
}
测试testIOC()方法

运行结果.png

总结

UserServiceImpl.java里实例化UserDao对象做为它的属性,UseServiceImpl.javaUserDaoImpl.java产生依赖关系。经过setUserDao()方法将userDao对象注入就叫作依赖注入。框架

相关文章
相关标签/搜索