栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring5实战(一) IOC与实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring5实战(一) IOC与实现

IOC控制反转理解

创建空白项目
导入spring core


    org.springframework
    spring-core
    5.3.13

  • 普通的方式

建dao层,写出接口、和实现类:

//UserDao
public interface UserDao {
    void getUser();
}
//UserDaoImpl
public class UserDaoImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("默认获取用户信息");
    }
}

新建service层,UserService接口和UserServiceImpl实现类

// UserService
public interface UserService {
    void getUser();
}
//UserServiceImpl
public class UserServiceImpl implements UserService{

    private UserDao userDao = new UserDaoImpl();
    
    public void getUser() {
        userDao.getUser();
    }
}

然后测试类中获取运行

        //用户实际调用业务层,不接触dao层
        UserServiceImpl userService = new UserServiceImpl();
        userService.getUser();

然而此时需求发生变化时,需要新建一个dao层实现类

同时需要修改Service层逻辑,一旦service层逻辑太过于复杂,修改设计的文件将会非常多

  • IOC 方式

在serivce层,使用set方法,动态注入userDao

public class UserServiceImpl implements UserService{

    private UserDao userDao;

    //使用set方法实现动态注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void getUser() {
        userDao.getUser();
    }
}
//main
        //用户实际调用业务层,不接触dao层
        UserServiceImpl userService = new UserServiceImpl();
        UserDaoMysqlImpl userDaoMysql = new UserDaoMysqlImpl();
        userService.setUserDao(userDaoMysql);
        userService.getUser();

  • IOC控制反转

控制指的是对象创建、实例化、管理的能力
反转是指,之前普通的方式实现,开发者掌握了主动权,但是需求发生改变时,我们需要改变的地方会特别多。而IOC控制反转的方法,反转了主动权,把主动控制权交给了外部环境。

  • IOC的作用:

解决依赖问题,有IOC容器的情况下,减少类与类之间依赖,比如上方service层类和dao层类之间的依赖,交由IOC控制容器去处理,IOC底层的思想简单来说就是set 动态注入

简单spring实现
  • spring 实例一

建一个普通类

public class Car {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "car{" +
                "name='" + name + ''' +
                '}';
    }
}

在xml配置文件中,声明一个bean,bean即为spring IOC容器管理对象的方式,声明一个id,以及指明类的路径
bean中property属性中,
value为对象设立属性值
ref 为引用创建好的bean对象

    
        
    

使用bean 通过new ClassPathXmlApplicationContext,新建ApplicationContext对象,通过getBean 传入id,强转类型即可。

        //获取spring的上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("beans1.xml");
        //我们的对象都在spring中管理,需要使用直接获取即可
        Car car = (Car) context.getBean("carTest");
        System.out.println(car.toString());

ClassPathXmlApplicationContext 的继承关系:

spring的创建方式

User类中添加无参构造器

而在getBean的过程中,构造器已经开始执行,说明其实已构建对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584601.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号