Spring零基础入门IOC

目录
  • 1.HelloSpring
  • 2.IOC创建对象方式
    • 2.1.通过无参构造方法来创建
    • 2.2.通过有参构造方法来创建

1.HelloSpring

导入Jar包

  <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.0.RELEASE</version>
        </dependency>

1、编写一个Hello实体类

public class Hello {
    private String str;
    public Hello(String str) {
        this.str = str;
    }
    public Hello() {
    }
    public String getStr() {
        return str;
    }
//set方法是核心
    public void setStr(String str) {
        this.str = str;
    }
    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + '\'' +
                '}';
    }
}

2、编写我们的spring文件 , 这里我们命名为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
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="hello" class="com.hc.pojo.Hello">
       <property name="str" value="Spring"/>
    </bean>
<!--    使用spring来创建对象,在spring这些都称为Bean-->
<!--    类型   变量名 =new 类型();-->
<!--    Hello hello=new Hello();-->
</beans>

3、我们可以去进行测试了 .

public class MyTest {
    public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Object hello = context.getBean("hello");
        System.out.println(hello.toString());
    }
}

思考

  • Hello 对象是谁创建的 ? hello 对象是由Spring创建的
  • Hello 对象的属性是怎么设置的 ? hello 对象的属性是由Spring容器设置的

这个过程就叫控制反转 :

  • 控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的
  • 反转 : 程序本身不创建对象 , 而变成被动的接收对象 .

依赖注入 : 就是利用set方法来进行注入的.

IOC是一种编程思想,由主动的编程变成被动的接收

可以通过newClassPathXmlApplicationContext去浏览一下底层源码 .

修改案例一

我们在案例一中, 新增一个Spring配置文件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
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="mysqlImpl" class="com.hc.dao.UserDaoMysqlImpl"/>
    <bean id="OracleImpl" class="com.hc.dao.UserDaoOracleImpl"/>
    <!--    使用spring来创建对象,在spring这些都称为Bean-->
    <!--    类型   变量名 =new 类型();-->
    <!--    Hello hello=new Hello();-->
    <bean id="UserServiceImpl" class="com.hc.service.UserServiceImpl">
<property name="userDao" ref="OracleImpl"/>
    </bean>
</beans>

测试!

import com.hc.dao.UserDaoMysqlImpl;
import com.hc.dao.UserDaoOracleImpl;
import com.hc.dao.UserDaoSqlserverImpl;
import com.hc.service.UserService;
import com.hc.service.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import sun.security.mscapi.CPublicKey;
/**
 * @author HC
 * @version 1.0
 */
public class MyTest {
    public static void main(String[] args) {
        //用户调用的是业务层,dao层他们不需要接触!
//        UserServiceImpl userService = new UserServiceImpl();
//        userService.setUserDao(new UserDaoSqlserverImpl());
//        userService.setUserDao(new UserDaoOracleImpl());
//        userService.getUser();
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl");
        userServiceImpl.getUser();
    }
}

OK , 到了现在 , 我们彻底不用再程序中去改动了 , 要实现不同的操作 , 只需要在xml配置文件中进行修改 , 所谓的IoC,一句话搞定 : 对象由Spring 来创建 , 管理 , 装配 !

2.IOC创建对象方式

2.1.通过无参构造方法来创建

通过无参构造方法来创建

1、User.java

public class User {
    private String name;
    public User(String name) {
        this.name = name;
    }
//    public User() {
//    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void show()
    {
        System.out.println("name="+getName());
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

2、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
        http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--一、无参-->
<!--   <bean id="user" class="com.kuang.pojo.User">-->
<!--       <property name="name" value="hc"/>-->
<!--   </bean>-->
<!--    //二、有参-->
<!--    <bean id="user" class="com.kuang.pojo.User">-->
<!--       <constructor-arg index="0" value="狂神说java"/>-->
<!--    </bean>-->
<!--    三、有参-->
<!--    <bean id="user" class="com.kuang.pojo.User">-->
<!--        <constructor-arg name="name" value="hc"/>-->
<!--    </bean>-->
    <bean id="user" class="com.kuang.pojo.UserT" name="u1 u2,u3">
        <property name="name" value="西部开源"/>
    </bean>
<!--    alias取别名-->
<!--    <alias name="user" alias="ccccccccccccccccc"/>-->
</beans>

3、测试类

public class MyTest {
    public static void main(String[] args) {
       // User user = new User();
       ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
       //User user1 = (User) context.getBean("user");
       // User user1 = (User) context.getBean("ccccccccccccccccc");
        UserT user4 = (UserT) context.getBean("u2");
        // User user2 = (User) context.getBean("user");
       user4.show();
        //System.out.println(user1==user2);
    }
}

结果可以发现,在调用show方法之前,User对象已经通过无参构造初始化了!

2.2.通过有参构造方法来创建

通过有参构造方法来创建

1、UserT . java

public class UserT {
    private String name;
    public UserT() {
        System.out.println("UserT被创建了");
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void show()
    {
        System.out.println("name="+getName());
    }
}

2、beans.xml 有三种方式编写

<!--一、无参-->
<!--   <bean id="user" class="com.kuang.pojo.User">-->
<!--       <property name="name" value="hc"/>-->
<!--   </bean>-->
<!--    //二、有参-->
<!--    <bean id="user" class="com.kuang.pojo.User">-->
<!--       <constructor-arg index="0" value="狂神说java"/>-->
<!--    </bean>-->
<!--    三、有参-->
<!--    <bean id="user" class="com.kuang.pojo.User">-->
<!--        <constructor-arg name="name" value="hc"/>-->
<!--    </bean>-->

3、测试

public class MyTest {
    public static void main(String[] args) {
       // User user = new User();
       ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
       //User user1 = (User) context.getBean("user");
       // User user1 = (User) context.getBean("ccccccccccccccccc");
        UserT user4 = (UserT) context.getBean("u2");
        // User user2 = (User) context.getBean("user");
       user4.show();
        //System.out.println(user1==user2);
    }
}

结论:在配置文件加载的时候。其中管理的对象都已经初始化了!

到此这篇关于Spring零基础入门IOC的文章就介绍到这了,更多相关Spring IOC内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring-IOC容器-Bean管理-基于XML方式超详解

    目录 Spring-IOC容器-Bean管理-基于XML方式 Spring框架概述 IOC概念和原理 IOC 操作 Bean 管理(set方式注入&&使用有参构造进行注入) IOC 操作 Bean 管理(xml注入其他类型属性) IOC 操作 Bean 管理(xml注入集合属性) IOC 操作 Bean 管理(FactoryBean) IOC 操作 Bean 管理(bean 作用域) IOC 操作 Bean 管理(bean 生命周期) IOC 操作 Bean 管理(XML自动装配) IOC

  • 向Spring IOC 容器动态注册bean实现方式

    目录 本文的大纲 从一个需求谈起 Spring Bean的生命周期再完善 BeanDefinition Bean 加入IOC容器的几种方式 从spring容器中动态添加或移除bean 本文的大纲 从一个需求谈起 这周遇到了这样一个需求,从第三方的数据库中获取值,只是一个简单的分页查询,处理这种问题,我一般都是在配置文件中配置数据库的地址等相关信息,然后在Spring Configuration 注册数据量连接池的bean,然后再将数据库连接池给JdbcTemplate, 但是这种的缺陷是,假设填

  • Spring框架IOC容器底层原理详解

    目录 1.什么是IOC 2.IOC容器的底层原理 3.那么上边提到的三种技术如何实现IOC的呢 4.IOC(接口) 1.什么是IOC IOC – Inverse of Control,控制反转,将对象的创建权力反转给Spring框架! 在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题. Spring 将创建对象的权利给了IO

  • 使用Java反射模拟实现Spring的IoC容器的操作

    目录 实现的功能: 项目结构 下面是程序的项目结构图: 自定义注解 容器实现 测试 实体类User的定义: 实现的功能: 默认情况下将扫描整个项目的文件 可以使用@ComponentScan注解配置扫描路径 只将被@Component注解修饰的类装载到容器中 可以使用@AutoWired注解实现自动装配 读取配置文件中的声明的类并注册到容器中 项目结构 下面是程序的项目结构图: 自定义注解 下面是自定义的三个注解: @AutoWired,@Component,@ComponentScan. @T

  • Java Spring 控制反转(IOC)容器详解

    目录 什么是容器? 无侵入容器 IOC控制反转 IOC理论推导 传统应用程序开发的弊端 "注入"机制 小结 IOC本质 DI(依赖注入) 总结 IoC 容器是 Spring 的核心,也可以称为 Spring 容器.Spring 通过 IoC 容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期. Spring 中使用的对象都由 IoC 容器管理,不需要我们手动使用 new 运算符创建对象.由 IoC 容器管理的对象称为 Spring Bean,Spring Bean 就是

  • 关于Springboot如何获取IOC容器

    目录 Springboot项目中获取IOC容器的方式 方法一(不实用,不推荐): 方法二(强烈推荐): 总结 Springboot项目中获取IOC容器的方式 在Springboot项目中如果要获取IOC容器目前有两种方法. 方法一(不实用,不推荐): 在Springboot项目中都会存在一个SpringApplication的启动类,我们通过以下代码启动IOC容器. SpringApplication.run(Application.class, args); 其实run方法会将创建的IOC容器

  • Spring IOC容器Bean管理XML注入集合类型属性

    目录 一.定义数组.list.map.set类型属性 二.配置文件中进行对应配置 三.注入对象集合类型 四.提取注入集合的部分 1. 引入名称空间 util 2. 使用 util 标签完成集合注入的提取 一.定义数组.list.map.set类型属性 创建类.定义数组.list.map.set类型属性,生成对应set方法. package com.pingguo.spring5.collectiontype; import java.util.Arrays; import java.util.L

  • 详解Springboot 注入装配到IOC容器方式

    1.通过bean注解装配到IOC容器 创建装配的类,如下 package com.sboot.pr.bean; /** * @author ygb * @Mailbox 941201063@qq.com * @date 2021年10月28日 * 通过bean注解装配到IOC容器 */ public class BeanPOJO { private int id; private String name; private int age; public int getId() { return

  • Spring IOC容器FactoryBean工厂Bean实例

    目录 前言 工厂 bean 前言 之前提到的 bean 是我们自己创建的,属于普通类型的 bean.还有一种是工厂 bean,属于 spring 中内置的一种类型. 区别是什么?以此配置为例: <bean id="course2" class="com.pingguo.spring5.collectiontype.Course"> <property name="course_name" value="毛氏面点课&qu

  • Spring零基础入门IOC

    目录 1.HelloSpring 2.IOC创建对象方式 2.1.通过无参构造方法来创建 2.2.通过有参构造方法来创建 1.HelloSpring 导入Jar包 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </de

  • Spring事务管理零基础入门

    目录 一.简介 二.特性(一原持久隔离) 2.1 原子性 2.2 一致性(类似能量守恒) 2.3 隔离性 2.4 持久性 三.隔离级别 3.1 事务级别(从低到高) 3.2 常用数据库默认级别: 3.3 事务中可能出现的问题: 四.传播特性 4.1 死活都不要事务 4.2 可有可无的 4.3 必须要有事务 五.应用 5.1 数据表 5.2 实体类 5.3 Service 一.简介 概念:事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,这些操作一起提交,要么都执行,要么都不

  • Spring零基础到进阶之使用方法详解

    目录 一.Spring的创建和使用 1.创建一个Maven项目 2.添加Spring框架支持 3.添加启动类 二.存储Bean 1.添加配置文件(非第一次省略此步) 2.创建Bean对象 2.1.创建Bean对象 2.2.将Bean对象注入到Spring中 三.获取并使用 Bean 对象 1.先得到Spring上下文对象 2.再通过上下文提供的方法获取到Bean对象 3.使用Bean对象 今天介绍一下Spring的基本使用,为了更好的熟悉Spring,可以先看一下我前面的文章: Spring鸿蒙

  • Spring零基础到进阶之鸿蒙开篇

    目录 Spring是什么 1.什么是容器? 2.什么是IOC? 3.理解Spring IoC 4.了解DI Spring是什么 用一句简单的话来概括Spring:Spring是包含了众多工具方法的IoC容器.那么问题来了,什么是容器,什么是IOC容器?下面就一起来看看吧 1.什么是容器? 容器就是用来荣南某种物品的装置,前面我们也是学了很多容器的,类似于List/Map就是一个存储数据的容器,Tomcat就是一个存储Web项目的容器. 2.什么是IOC? IOC(inversion of Con

  • SpringBoot零基础入门之基本操作与概念

    目录 1.什么是Spring Boot 2.Spring Boot优点 3.Spring Boot 项目创建 3.1 使用Idea 创建 3.2 Spring Boot 项目 3.3 启动并验证Spring Boot项目有没有创建成功 3.4 网页版创建(了解) 4.项目目录介绍和运用 4.1 项目运行 4.2 输出 Hello world 5.注意事项-包路径错误 5.1 正确路径 5.2 小结 总结 1.什么是Spring Boot 为什么要学Spring Boot? Spring 的诞生是

  • Bootstrap零基础入门教程(三)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 写到这里,这篇从零开始学Bootstrap(3)我想写以下几个内容: 1. 基于我对Bootstrap的理解,做一个小小的总结.

  • Bootstrap零基础入门教程(二)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 本文重点给大家介绍Bootstrap零基础入门教程(二),具体详情如下所示: 过程中会频繁查阅资料的网站: http://www.

  • C++中的STL中map用法详解(零基础入门)

    目录 一.什么是 map ? 二.map的定义 2.1 头文件 2.2 定义 2.3 方法 三.实例讲解 3.1 增加数据 3.2 删除数据 3.3 修改数据 3.4 查找数据 3.5 遍历元素 3.6 其它方法 四.总结 map 在编程中是经常使用的一个容器,本文来讲解一下 STL 中的 map,赶紧来看下吧! 一.什么是 map ? map 是具有唯一键值对的容器,通常使用红黑树实现. map 中的键值对是 key value 的形式,比如:每个身份证号对应一个人名(反过来不成立哦!),其中

  • Django零基础入门之调用漂亮的HTML前端页面

    引言:    Django如何调用HTML前端页面呢? Django怎样去调用漂亮的HTML前端页面呢? 就直接使用render方法即可! render方法是django封装好用来调用HTML前端模板的方法! 1.模板放在哪? 在主目录下创建一个templates目录用来存放所有的html的模板文件.(如果是使用pycharm创建django项目的话,默认就会自动创建这个目录哦!但是用命令创建django项目的话是没有此目录的!) templates目录里面再新建各个以app名字命名的目录来存放

  • Django零基础入门之路由path和re_path详解

    目录 urls.py文件中的path和re_path 1.path的基本规则: 2.默认支持的转换器有: 3.re_path正则匹配: Django中实战使用path和re_path 1.urls.py文件: 2.views.py视图函数文件: 3.效果: 假设现在有个需求:   需要通过URL进行参数传递,我们该怎么做呢?     其中有个方法就是本文要讲的内容--path和进阶版的re_path. urls.py文件中的path和re_path 1.path的基本规则: path('test

随机推荐