spring5实战(一) IOC与实现

spring5实战(一) IOC与实现,第1张

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的过程中,构造器已经开始执行,说明其实已构建对象

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5575810.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存