spring-- IOC

控制反转(IOC):控制反转就是通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在spring中实现控制反转的ioc容器,其实现方法是依赖注入(Dependency injection DI)

之前用户的需求发生变化时,我们需要去更改源代码。这样很不方便。

例子:有三个Dao层的类分别是

public interface UserDao {
    void getUser();
}
public class UserDaoImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("默认获取用户数据");
    }
}
public class UserDaoMysqlImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("mysql获取用户数据");
    }
}

再有两个业务层的类:

public interface UserService {
    void getUser();
}
public class UserServiceImpl implements UserService {
    private UserDao userDao = new UserDaoImpl();

    public void getUser() {
        userDao.getUser();
    }

}

测试类:

public class MyTest {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        userService.getUser();

    }
}

现在输入的是:默认获取用户数据

如果用户想要使用mysql去获取用户数据,那么我们需要更改源代码才可以实现。

 每当用户修改需求的时候都需要更改源代码,显然不合适。

现在我们使用一个set接口实现。这样会方便很多。

public class UserServiceImpl implements UserService {
    private UserDao userDao ;
    
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
    public void getUser() {
        userDao.getUser();
    }

}

使用的时候只需要set新的对象就行了

public class MyTest {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        ((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());
        userService.getUser();

    }
}

这样已经发生的革命性的变化。

而使用spring的时候会更加方便:

1.写配置文件beans.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--使用spring来创建对象,在spring中这些都统称为Bean-->
    <!-- id= 变量名  class = new的对象 property = 属性设置-->
    <bean id="UserDaoImpl" class="com.yf.dao.UserDaoImpl"></bean>
    <bean id="UserDaoMysqlImpl" class="com.yf.dao.UserDaoMysqlImpl"></bean>
    <bean id="UserServiceImpl" class="com.yf.service.UserServiceImpl">
        <!--
        ref:引用spring容器中创建好的对象
        value:具体的值,基本数据类型!
        -->
        <property name="userDao" ref="UserDaoImpl"/>
    </bean>
</beans>

注意value和ref的区别

2.获取ApplicationContext对象

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

3.通过context对象获取bean对象

UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl");

这样就可以使用了,当用户的需求发生变化的时候,只需要更改配置文件就行了。

    <bean id="UserServiceImpl" class="com.yf.service.UserServiceImpl">
        <!--
        ref:引用spring容器中创建好的对象
        value:具体的值,基本数据类型!
        -->
        <property name="userDao" ref="UserDaoImpl"/>
    </bean>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值