【Spring框架】spring对象注入的三种方法

这篇具有很好参考价值的文章主要介绍了【Spring框架】spring对象注入的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.属性注入

属性注⼊是使⽤ @Autowired 实现的,将 Service 类注⼊到 Controller 类中。

package com.java.demo.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {
    public int add() {
        System.out.println("Do UserRepository add method.");
        return 1;
    }
}

package com.java.demo.service;

import com.java.demo.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    // 1. 属性注入
    @Autowired // DI(依赖注入)
    private UserRepository userRepository;

    public int add() {
        System.out.println("Do UserService add method.");
        // 传统写法
//        UserRepository userRepository = new UserRepository();
//        return userRepository.add();
        // Spring V1.0
//        ApplicationContext context =
//                new ClassPathXmlApplicationContext("spring-config.xml");
//        UserRepository userRepository = context.getBean("userRepository",UserRepository.class);
//
//        return userRepository.add();


        // Spring V2.0
        return userRepository.add();
    }
}

【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端

依赖注入 VS 依赖查找
-依赖查找依赖 Bean
-@Autowired 依赖注入流程:首先先根据getType(从容器中)获取对象,如果只获取一个,那么直接将此对象注入到当前属性上;如果获取到多个对象,才会使用getName(根据名称)进行匹配。

问题:同类型的Bean存储到容器多个,获取时报错的问题;

【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端
解决方案:

1.将属性的名字和Bean的名字对应上。

【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端
【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端

2.使用@AutoWired+@Qualifier来筛选bean对象;

【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端

属性注入优缺点

优点:使用简单。
缺点:
a)无法注入一个不可变的变量(final修饰的变量)
【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端
b)只适用于IoC容器。
c)更容易违背单一设计原则,因为使用起来比较简单。

2.Setter注入

package com.java.demo.service;

import com.java.demo.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService3 {

    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void sayHi() {
        System.out.println("Do UserService3 sayHi.");
        userRepository.add();
    }
}

【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端

Setter注入优缺点

优点:通常Setter只set一个属性,所以Setter注入更符合单一设计原则
缺点:
a)无法注入一个final修饰的变量;
b)Setter注入的对象可以被修改。Setter本生就是一个方法,既然是一个方法就有可能被多次调用和修改。

3.构造方法注入(Spring 4.x之后推荐注入方式)

package com.java.demo.service;

import com.java.demo.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService4 {
    private UserRepository userRepository;

    @Autowired
    public UserService4(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void sayHi() {
        System.out.println("Do UserService4 sayHi.");
        userRepository.add();
    }

}

【Spring框架】spring对象注入的三种方法,JavaEE,spring,java,后端
如果当前类中存在一个构造方法时,@Autowired可以省略。

构造方法注入优缺点

优点:
a)可以注入一个final修饰的变量。
b)注入的对象不会修改,因为构造方法只会加载一次。
c)构造方法注入可以保证注入对象完全初始化。
d)构造方法注入通用性更好。
缺点:
a)写法比属性注入复杂。
b)使用构造方法注入,无法解决循环依赖的问题。文章来源地址https://www.toymoban.com/news/detail-612842.html

到了这里,关于【Spring框架】spring对象注入的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • javaee spring依赖注入之spel方式

    2024年02月11日
    浏览(32)
  • Spring的三种异常处理方式

            异常分为编译时异常和运行时异常,编译时异常我们 try-cache 进行捕获,捕获后自行处理,而运行时异常是不 可预期的,就需要规范编码来避免,在SpringMVC 中,不管是编译异常还是运行时异常,都可以最终由 SpringMVC提供的异常处理器进行统一处理,这样就避免了

    2024年02月12日
    浏览(33)
  • Spring 创建 Bean 的三种方式

    在使用 Spring 框架后,对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架,基于注解的方式实现 Bean 的创建,但在原生 Spring 框架中其实存在三种创建 Bean 的方式。 BeanProcess 实体类,虽然加了 @Component 等三个注解,但只在注解方式创建

    2024年02月14日
    浏览(38)
  • spring中bean实例化的三种方式 -- Spring入门(二)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码以及可以在我主页的资源里找到,如果在学

    2024年02月16日
    浏览(27)
  • Spring Boot 禁用 Swagger 的三种方式

    禁用方法1: ====== 使用注解 @Value() 推荐使用 package com.dc.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; impo

    2024年04月22日
    浏览(30)
  • javaee spring 自动注入,如果满足条件的类有多个如何区别

    如图IDrinkDao有两个实现类 @Resource(name=“对象名”)

    2024年02月11日
    浏览(24)
  • java中判断对象类型的三种方法

    instanceof instanceof 是 Java 中的一个,用于判断一个对象是否是指定类型或其子类型的实例。它的使用格式为: 其中, 对象 是待判断的对象, 类型 是要判断的类型。 instanceof 的返回值是一个布尔值,如果对象是指定类型或其子类型的实例,则返回 true ,否则返回

    2024年02月03日
    浏览(33)
  • 【JavaEE进阶】 Spring使用注解存储对象

    在博主前面所写的《【JavaEE进阶】 Spring 的创建和使⽤》中我们已经可以实现基本的 Spring 读取和存储对象的操作了,但在操作的过程中我们发现读取和存储对象并没有想象中的那么“简单”,所以接下来我们要学习更加简单的操作 Bean 对象的⽅法。 在 Spring 中想要更简单的存

    2024年02月05日
    浏览(34)
  • spring boot请求http接口的三种方式

    HttpURLConnection 是 Java 中的 HTTP 客户端实现,,适用于简单的请求需要。 HttpURLConnection主要工作内容:打开socket连接,封装http请求报文,解析请求报文。 OkHttp 是一个第三方的 HTTP 客户端库,它比 Java 标准的 HttpURLConnection 更高效、更实用。主要特点包括: 比 HttpURLConnection 快得多

    2024年02月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包