返回顶部
首页 > 资讯 > 后端开发 > Python >Java 中的控制反转(IOC)详解
  • 232
分享到

Java 中的控制反转(IOC)详解

2024-04-02 19:04:59 232人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录ioc理论推导spring管理对象Spring管理对象的简单例子Bean无参构造类创建和有参构造类创建Spring的一些配置别名Bean的配置import总结ioC理论推导

ioC理论推导

在这里插入图片描述

在这里插入图片描述

Dao层

1.UserDao 接口

2.UserDaoImpl 实现类

Service层

3.UserService 业务接口

4.UserServiceImpl 业务实现类

用户实际调用service层 不会动dao层!

Dao层接口创建


package com.ckm.dao;
public interface UserDao {
    void getUser();
}

Dao层实现类1创建


package com.ckm.dao;
public class UserDaoImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("获取了User数据");
    }
}

Dao层实现类2创建


package com.ckm.dao;
public class UserDaoMysqlImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("mysql使用了数据");
    }
}

Service层接口创建


package com.ckm.service;
public interface UserService {
    void getUser();
}

Service层接口实现类创建


package com.ckm.service;
import com.ckm.dao.UserDao;
import com.ckm.dao.UserDaoImpl;
public class UserServiceImpl implements UserService{
//    private UserDao userDao = new UserDaoImpl();
    //利用set进行动态实现值的注入
    private UserDao userDao;
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
    @Override
    public void getUser() {
        userDao.getUser();
    }
}

单元测试


import com.ckm.dao.UserDaoImpl;
import com.ckm.dao.UserDaoMysqlImpl;
import com.ckm.service.UserServiceImpl;
public class TestIOC {
    public static void main(String[] args) {
        //用户实际调用service层 不会动dao层!
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(new UserDaoMysqlImpl());
        userService.getUser();
    }
}

在这里插入图片描述

Spring管理对象

resources中新建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-->
    <!--bean = 对象-->
    <!--id = 变量名-->
    <!--class = new的对象-->
    <!--property 相当于给对象中的属性设值-->
    <bean id="DaoImpl" class="com.ckm.dao.UserDaoImpl" />
    <bean id="MysqlImpl" class="com.ckm.dao.UserDaoMysqlImpl" />
    <bean id="UserServiceImpl" class="com.ckm.service.UserServiceImpl">
        <!--
        value具体的值,基本数据类型
        ref是引用Spring中创建好的对象
        用户需要什么 就直接修改ref就ok
        -->
        <property name="userDao" ref="MysqlImpl" />
    </bean>
</beans>

dao层、Service层代码不变

测试


import com.ckm.service.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIOC {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl");
        userServiceImpl.getUser();
    }
}

在这里插入图片描述

Spring管理对象的简单例子

User类


package com.ckm.pojo;
public class Hello {
    private String str;
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + '\'' +
                '}';
    }
}

beans.xml


package com.ckm.pojo;
public class Hello {
    private String str;
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + '\'' +
                '}';
    }
}

测试类


import com.ckm.pojo.Hello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
    public static void main(String[] args) {
        //获取spring的上下文对象
        //xml加载必须new ClassPathXmlApplicationContext()
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        //我们的对象现在都在spring中管理,我们要使用,直接去里面取出来
        Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello.getStr());
    }
}

在这里插入图片描述

Bean无参构造类创建和有参构造类创建

当getBean的时候,这个类就已经被实例化了,就会执行无参构造方法

有参构造的User类


package com.ckm.pojo;
public class User {
    private String name;
//    public User() {
//        System.out.println("无参构造");
//    }
    public User(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void show(){
        System.out.println("name="+name);
    }
}

编写Beans.xml


    <!--第一种 下标赋值-->
    <bean id="user" class="com.ckm.pojo.User">
        <constructor-arg index="0" value="这个是第一种有参设置的name"/>
    </bean>

    <!--第二种 直接通过参数名-->
    <bean id="user" class="com.ckm.pojo.User">
        <constructor-arg name="name" value="这个是第二种方法是有参设置的name"/>
    </bean>

Spring的一些配置

别名


    <!--alias是别名,我们可以使用这个别名来获取这个对象-->
    <alias name="user" alias="userNew"/>

Bean的配置


    <!--在bean中name也是别名,可以同时取多个别名-->
    <bean id="user" class="com.ckm.pojo.User" name="user1,user2,user3,user4"/>

import


   <!--这个import,一般用于团队开发,他可以将多个配置文件导入合并成一个-->
    <import resource="beans1.xml"/>
    <import resource="beans2.xml"/>

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更对内容!

--结束END--

本文标题: Java 中的控制反转(IOC)详解

本文链接: https://lsjlt.com/news/137881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java 中的控制反转(IOC)详解
    目录IOC理论推导Spring管理对象Spring管理对象的简单例子Bean无参构造类创建和有参构造类创建Spring的一些配置别名Bean的配置import总结IOC理论推导 ...
    99+
    2024-04-02
  • Spring的IOC控制反转详解
    目录1、什么是IOC?2、分享Bromon的blog上对IoC与DI浅显易懂的讲解3、Spring容器创建对象的三种方式第一种方法:利用默认的构造方法第二种方法:利用静态工厂方法第三...
    99+
    2024-04-02
  • Java Spring 控制反转(IOC)容器详解
    目录什么是容器?无侵入容器IOC控制反转IOC理论推导传统应用程序开发的弊端“注入”机制小结IOC本质DI(依赖注入)总结IoC 容器是 Spring 的核心,也可以称为 Sprin...
    99+
    2024-04-02
  • spring IOC控制反转原理详解
    目录IOC概念补:工厂模式和单例模式区别IOC接口——实现IOC容器1.BeanFactory2.ApplicationContextIOC操作管理Beanx...
    99+
    2024-04-02
  • 如何在Java中利用IOC控制反转
    这篇文章给大家介绍如何在Java中利用IOC控制反转,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以...
    99+
    2023-05-31
    java ioc
  • laravel中ioc控制反转指的是什么
    这篇文章主要介绍“laravel中ioc控制反转指的是什么”,在日常操作中,相信很多人在laravel中ioc控制反转指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”laravel中ioc控制反转指的...
    99+
    2023-06-29
  • 深入了解Spring控制反转IOC原理
    目录一、什么是Spring IOC容器二、IOC有哪些优点三、控制反转(IOC)有什么作用四、IoC和DI有什么区别五、Spring IoC的实现机制六、IoC支持哪些功能七、Bea...
    99+
    2022-11-13
    Spring控制反转IOC Spring控制IOC Spring IOC
  • Java反射机制在Spring IOC中的应用详解
    目录Java反射机制在SpringIOC的应用下面是Spring通过配置进行实例化对象Spring的配置如下所示实现一下Spring底层处理原理反射机制、反射机制的作用、反射机制的功...
    99+
    2024-04-02
  • .net程序开发IOC控制反转和DI依赖注入详解
    目录IOC控制反转DI依赖注入服务生命周期其它IOC控制反转 大部分应用程序都是这样编写的:编译时依赖关系顺着运行时执行的方向流动,从而生成一个直接依赖项关系图。 也就是说,如果类 ...
    99+
    2022-11-13
    .net 控制反转依赖注入 .net IOC DI
  • 使用Spring.Net如何实现控制反转IoC
    今天就跟大家聊聊有关使用Spring.Net如何实现控制反转IoC,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Spring.Net包括控制反转(IoC) 和面向切面(AOP)一、首...
    99+
    2023-05-31
    spring.net ioc
  • 自己编写IOC控制反转及AOP面向切面
    目录1.概念IOC:Inversion of control 控制反转AOP:Aspect oriented Programming 面向切面编程2.通过银行转账案例手写IOC和AO...
    99+
    2024-04-02
  • spring中IOC控制反转依赖注入和new对象的区别说明
    目录IOC控制反转依赖注入和new对象的区别new对象依赖注入spring的IOC容器比New对象究竟好在哪IOC控制反转依赖注入和new对象的区别 spring默认是单例模式的,依...
    99+
    2024-04-02
  • Android应用开发中控制反转IoC设计模式使用教程
    1、概述 首先我们来吹吹牛,什么叫IoC,控制反转(Inversion of Control,英文缩写为IoC),什么意思呢? 就是你一个类里面需要用到很多个成员变量,传统的写...
    99+
    2022-06-06
    ioc 教程 Android
  • Spring6-IoC(Inversion of Control)控制反转和DI(Dependency Injection)依赖注入,手动实现IOC
    文章目录 1、Java反射2、实现Spring的IOC 1、Java反射 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用...
    99+
    2023-09-04
    java servlet spring
  • Java中的反射机制详解
    目录一、什么是反射?二、为什么要用反射三、Class类四、获取Class类对象的四种方式五.通过反射构造一个类的实例①使用Class.newInstance②通过反射先获取构造方法再...
    99+
    2024-04-02
  • 深入理解Go语言中的控制反转
    控制反转(ioc)是软件设计模式,将对象依赖关系分离为硬编码耦合。在 go 中,可以通过接口和依赖注入(di)实现 ioc:接口:定义方法集,遵循该接口的类型必须实现这些方法。依赖注入:...
    99+
    2024-04-08
    go语言 控制反转
  • 理解Spring中的依赖注入和控制反转
    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框...
    99+
    2023-05-30
    spring 依赖注入 控制反转
  • 详解Java中的流程控制
    1.分支结构的概念 当需要进行条件判断并做出选择时,使用分支结构 2.if分支结构 格式: if(条件表达式){ 语句块; } package com.lagou.Day...
    99+
    2024-04-02
  • Java中的反射机制示例详解
    目录反射什么是Class类获取Class实例的三种方式通过反射创建类对象通过反射获取类属性、方法、构造器更改访问权限和实例赋值运用场景反射 反射就是把Java类中的各个成分映射成一个...
    99+
    2024-04-02
  • Java反射机制详解
    目录类的声明周期不同阶段都可以获取类对象获取Class类对象的方式的场景class类对象的功能如何获取私有变量的值根据有无主方法判断进程和线程反射出现的背景(记住)反射出现的背景类的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作