Spring的简介ioc容器及注入方式2

简介: Spring的简介ioc容器及注入方式2

三.Spring的注入方式

1.set注入

1.1 准备好Action层,定义好属性,提供get,set方法

package com.YU.ioc.web;
import com.YU.ioc.service.UserService;
import com.YU.ioc.service.impl.UserServiceImpl1;
import java.util.List;
/**
 * @author YU
 * @create 2023-08-14 18:29
 */
public class BookAction {
    private UserService userService;
    private String bname;//书名
    private int date;//发行日期
    private List<String> people;//适用人群
    public String getBname() {
        return bname;
    }
    public void setBname(String bname) {
        this.bname = bname;
    }
    public int getDate() {
        return date;
    }
    public void setDate(int date) {
        this.date = date;
    }
    public List<String> getPeople() {
        return people;
    }
    public void setPeople(List<String> people) {
        this.people = people;
    }
    public void pros() {
        System.out.println(this.bname);
        System.out.println(this.date);
        System.out.println(this.people);
    }
    public UserService getUserService() {
        return userService;
    }
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    public String update() {
        userService.update();
        return "list";
    }
}

2.配置好Xml文件

<bean class="com.YU.ioc.web.BookAction" id = "bookAction">
        <property name="userService" ref="userServiceImpl1"></property>
        <property name="bname" value="亚马逊漂流记"></property>
        <property name="date" value = "12"></property>
        <property name="people" >
            <list>
                <value>儿童</value>
                <value>青少年</value>
            </list>
        </property>
    </bean>

3.编写方法,显示是否注入成功

4.测试

package com.YU.ioc.demo;
import com.YU.ioc.web.BookAction;
import com.YU.ioc.web.UserAction;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * @author YU
 * @create 2023-08-14 19:16
 */
public class Demo1 {
    public static void main(String[] args) {
        //处理用户请求时,获取spring上下文对象
        ClassPathXmlApplicationContext context = new                     ClassPathXmlApplicationContext("spring-context.xml");
        BookAction bookAction = (BookAction) context.getBean("bookAction");
        bookAction.pros();
    }
}

5.打印结果

显示注入成功

2.构造方法注入

1.准备好Action层,与set注入的不同的是,用的是构造方法注入

package com.YU.ioc.web;
import com.YU.ioc.service.UserService;
import java.util.List;
/**
 * @author YU
 * @create 2023-08-14 18:35
 */
public class UserAction {
    private UserService userService;
    private String uname;
    private int age;
    private List<String> hobby;
    public UserAction() {
    }
    public UserAction(String uname, int age, List<String> hobby) {
        this.uname = uname;
        this.age = age;
        this.hobby = hobby;
    }
    public void pros(){
        System.out.println(this.uname);
        System.out.println(this.age);
        System.out.println(this.hobby);
    }
    public UserService getUserService() {
        return userService;
    }
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    public String update(){
        userService.update();
        return "list";
    }
}

2.配置XML文件

<bean class="com.YU.ioc.web.UserAction" id = "userAction">
        <property name="userService" ref="userService"></property>
        <constructor-arg name="uname" value="小刘"></constructor-arg>
        <constructor-arg name="age" value = "18"></constructor-arg>
        <constructor-arg name="hobby" >
            <list>
                <value>打球</value>
                <value>读书</value>
            </list>
        </constructor-arg>
    </bean>

区别在于用到是construct-arg

3.编写测试方法,判断是否注入成功

4.测试

package com.YU.ioc.demo;
import com.YU.ioc.web.BookAction;
import com.YU.ioc.web.UserAction;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * @author YU
 * @create 2023-08-14 19:16
 */
public class Demo1 {
    public static void main(String[] args) {
        //处理用户请求时,获取spring上下文对象
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
        UserAction userAction = (UserAction) context.getBean("userAction");
        userAction.pros();
    }
}

5.测试结果

显示注入成功

3.总结

构造方法注入强调依赖的必需性和不变性,适用于一次性注入全部依赖的情况。

Setter方法注入提供了更大的灵活性,允许在对象创建后动态地注入依赖,适用于需要可选依赖或在运行时修改依赖的情况。

在实践中,可以根据具体需求选择适合的注入方式,甚至可以将构造方法注入和Setter方法注入结合起来使用,以达到更好的灵活性和控制。

目录
相关文章
|
2月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
6月前
|
XML 人工智能 Java
Spring IOC 到底是什么?
IOC(控制反转)是一种设计思想,主要用于解耦代码,简化依赖管理。其核心是将对象的创建和管理交给容器处理,而非由程序直接硬编码实现。通过IOC,开发者无需手动new对象,而是由框架负责实例化、装配和管理依赖对象。常见应用如Spring框架中的BeanFactory和ApplicationContext,它们实现了依赖注入和动态管理功能,提升了代码的灵活性与可维护性。
195 1
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
7月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
XML Java 数据格式
Spring【依赖注入】就是这么简单(二)
在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容器来解决对象之间的依赖关系!
224 0
Spring【依赖注入】就是这么简单(二)
|
Java 测试技术 容器
Spring【依赖注入】就是这么简单
前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容器来解决对象之间的依赖关系! 回顾以前对象依赖 我们来看一下我们以前关于对象依赖,是怎么的历程 直接new对象 在最开始,我们是直接new对象给serice的userDao属性赋值.
1264 0
|
5月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
939 0
|
6月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
684 0
|
2月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
321 3
|
2月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
870 2