首页 > 其他分享 >Sping-IOC容器创建对象的方式

Sping-IOC容器创建对象的方式

时间:2024-04-25 23:02:03浏览次数:27  
标签:user name Sping 创建对象 class User IOC public String

4、IOC容器创建对象的方式

4.1 无参注入 默认

  • 第一步 编写实体类 最好不要使用lombok插件
package 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;
    }

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

  • 第二步 编写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="pojo.User">
        <property name="name" value="lsl"/>
    </bean>
</beans>
  • 第三步 测试
package pojo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Mytest {
    @Test
    public void test(){
        /*获取容器*/
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        /*提取对象 其中getBean("user", User.class)中的user必须和beans.xml配置文件中注册的bean对象的id相同*/
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}
//结果输出为  无参构造  User{name='lsl'}  故可以得知Sping容器默认的是无参构造

4.2 有参构造(第一种 下标法)

  • 第一步 编写实体类
package 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;
    }

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

  • 第二步 编写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="pojo.User">
        <constructor-arg index="0" value="lsl"/>
    </bean>
</beans>
  • 第三步 测试
package pojo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Mytest {
    @Test
    public void test(){
        /*获取容器*/
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        /*提取对象 其中getBean("user", User.class)中的user必须和beans.xml配置文件中注册的bean对象的id相同*/
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

4.3 有参构造(第二种 参数类型 不建议使用)

  • 第一步 编写实体类
package 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;
    }

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

  • 第二步 编写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="pojo.User">
        <constructor-arg type="java.lang.String" value="xhq"/>
    </bean>
</beans>
  • 第三步 测试
package pojo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Mytest {
    @Test
    public void test(){
        /*获取容器*/
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        /*提取对象 其中getBean("user", User.class)中的user必须和beans.xml配置文件中注册的bean对象的id相同*/
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

4.4 有参构造(第三种 参数名)

  • 第一步 编写实体类
package 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;
    }

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

  • 第二步 编写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="pojo.User">
        <constructor-arg name="name" value="love"/>
    </bean>
</beans>
  • 第三步 测试
package pojo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Mytest {
    @Test
    public void test(){
        /*获取容器*/
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        /*提取对象 其中getBean("user", User.class)中的user必须和beans.xml配置文件中注册的bean对象的id相同*/
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

  • 总结 :在配置文件加载时 容器里管理的对象就已经初始化了

标签:user,name,Sping,创建对象,class,User,IOC,public,String
From: https://www.cnblogs.com/advancingSnail/p/18158849

相关文章

  • Sping-接管创建对象
    3、使用Sping来接管创建对象3.1第一步新建一个实体类packagepojo;publicclassHello{privateStringstr;publicHello(){}publicHello(Stringstr){this.str=str;}publicStringgetStr(){returnstr;}......
  • Sping-IOC理论推导
    2、IOC理论推导2.1IOC原型使用原来的方式实现第一步:编写UseDAO接口packagedao;publicinterfaceUseDao{voidgetUser();}第二步:编写UseDao的实现类//实现类一packagedao;publicclassUserDaoImplimplementsUseDao{@Overridepublicvo......
  • 从依赖倒置原则到IOC控制反转实现
    从依赖倒置原则(DependencyInversionPrinciple,DIP)到控制反转(InversionofControl,IoC)再到依赖注入(DependencyInjection,DI)的演进过程,我们可以理解为一种逐步抽象和解耦的设计思想。这种思想在C#等面向对象的编程语言中得到了广泛的应用。首先,让我们回顾一下依赖倒置原则。......
  • Spring 源码阅读(二)IoC 容器初始化以及 BeanFactory 创建和 BeanDefinition 加载过程
    相关代码提交记录:https://github.com/linweiwang/spring-framework-5.3.33IoC容器三种启动方式XMLJavaSE:ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml")ApplicationContextcontext=newFileSystemXmlApplicationContext("C:/beans......
  • 快速理解Laravel容器(IOC、DI、Provider、Contract)
    源码理解思维的提升分享一些个人见解。Laravel里面的某些概念,就像魔术一样,看起来很厉害,当知道魔术怎么变的,就会认为也不过如此。所以不必感觉Laravel里有些概念难以理解。应当抛除被框架约束思维的枷锁,用PHP设计的角度去思考,关注大概,而不是在在框架层面逐行磨叽。毕竟源码那么......
  • 【chatgpt】IoCreateDevice和IoCreateSymbolicLink是两个重要的函数
    在Windows设备驱动程序开发中,IoCreateDevice和IoCreateSymbolicLink是两个重要的函数,用于创建设备对象和符号链接,它们的作用如下:IoCreateDevice:作用:创建一个设备对象,驱动程序使用设备对象来与系统和其他驱动程序进行通信。参数:需要提供设备扩展名和设备的类型、特征以及......
  • C#中 控制反转IOC与依赖注入DI
    一、IOC与DI的关系IOC即控制反转,用来管理项目中对象的生命周期和依赖关系,DI依赖注入,用来实现IOC,IOC是思想,DI是实现,在项目中通常一起出现,像是A类调用B类的方法,IOC容器资源给予对应资源,有助于实现依赖倒置DIP二、DI常用的注入方式(.net的DI默认的是构造函数定义)构造函数注入:构......
  • Linux 64位内核(arm64)驱动兼容32位应用程序(armhf)的ioctl接口
    最近,公司来了一次硬件升级,开发平台从全志T3(armhf)升级到全志T527(arm64),平台迁移后,想直接使用原来动态库和应用程序从而减少开发量,用户态大部分接口都运行正常,唯独ioctl接口无法调用成功。如果要成功移植要做到以下几点:1.驱动要同时实现unlocked_ioctl和compat_ioctl。str......
  • Godot.NET C#IOC重构(3):视差景深背景
    目录相关链接前言目标效果景深效果实现无限长背景重复景深相关链接十分钟制作横版动作游戏|Godot4教程《勇者传说》#0前言这次来学习如何设置景深目标效果景深效果实现无限长背景只要开起了Mirror,Godot就会进行无限自我复制重复景深......
  • 通过Supplier创建对象示例
    通过Supplier接口创建对象,具体code如下:packagecom.gientech.supplier;publicclassCar{privateStringname;publicCar(){}publicCar(Stringname){this.name=name;}publicStringgetName(){returnname;......