首页 > 其他分享 >Spring基于注解的IOC配置

Spring基于注解的IOC配置

时间:2023-12-20 23:46:26浏览次数:38  
标签:accountDao Spring bean import 注解 属性 IOC 注入

目录

基于注解的IOC配置

曾经XML的配置

<bean id="accountService" class="com.zjw.service.impl.AccountServiceImpl"
scope="" init-method="" destroy-method="">
    <property name="" value="" | ref=""></property>
</bean>

注解分为用于创建对象,用于注入数据,和改变作用范围

1、用于创建对象的注解

他们的作用就和在xml配置文件中的标签实现的功能是一样的

@Component:

作用:用于把当前类对象存入spring容器中

属性

  • value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母小写。

@Controller :一般用在表现层
@Service :一般用在业务层
@Repository :一般用在持久层

以上三个注解他们的作用和属性与Component是一模一样

他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰

2、用于注入数据的

他们的作用就和在xml配置文件中的bean标签中写一个property标签的作用是一样的

@Autowired:
作用:自动按照类型注入。只要容器中有唯一的bean对象类型和要注入的变量类型匹配,就可以注入成功.

  • 如果ICO容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
  • 如果有两个以上类型,按照变量名称注入。
  • 如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false

出现位置

  • 可以是变量上,也可以是方法上

细节

在使用注解注入时,set方法就不是必须的。
说明:spring 4.0开始就不推荐使用属性注入,改为推荐构造器注入和setter注入
https://zhuanlan.zhihu.com/p/92395282
https://www.cnblogs.com/lvdeyinBlog/p/15178226.html

@Qualifier

作用:在按照类型注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用,配合@Autowired使用。但是在给方法参数注入可以单独使用

属性
value:用于指定注入bean的id

@Resource

作用:直接按照bean的id注入。它可以单独使用

  • 如果没有指定name属性,当注解写在字段上时,默认取属性名进行按照名称查找,如果按照属性名称没有找到则按照属性类型查找。

  • 如果指定name,就只会按照名称进行装配。

  • 如果注解写在setter方法上默认取属性名进行装配。

属性

  • name:用于指定bean的id

以上三个注入都是只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
另外,集合类型的注入只能通过XML来实现。

@Value

作用:用于注入基本类型和String类型的数据

属性

value:用于指定数据的值。它可以使用spring中SpEL(也就是Spring的el表达式)

SpEL的写法:$

3、用于改变作用范围的

他们的作用就和在bean标签中使用scope属性实现的功能是一样的

@Scope

作用:用于指定bean的作用范围

属性

value:指定范围的取值。常用取值:singleton、prototype,默认singleton

和生命周期相关

他们的作用就和在bean标签中使用init-method和destroy-method的作用是一样的

@PreDestroy
作用:用于指定销毁方法

@PostConstruct
作用:用于指定初始化方法

示例

package com.zjw.service.impl;

import com.zjw.dao.IAccountDao;
import com.zjw.service.IAccountService;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 * 账户的业务层实现类
 */
@Component("accountService")
@Scope(value = "singleton") //默认也是单例
public class AccountServiceImpl implements IAccountService {

//    @Autowired
//    private IAccountDao accountDao ;

    //通过构造器注入
//    private final IAccountDao accountDao ;

//    @Autowired
//    @Qualifier("accountDao1")
//    private IAccountDao accountDao ;

    @Resource
//    @Resource(name = "accountDao1")
    private IAccountDao accountDao ;


    @Value("张三")
    private String name ;


    @Override
    public void saveAccount() {
        accountDao.saveAccount();
    }

    @PostConstruct
    public void init(){
        System.out.println("AccountServiceImpl……init方法执行了");
    }

    @PreDestroy
    public void destroy(){
        System.out.println("AccountServiceImpl……destroy方法执行了");
    }

    public AccountServiceImpl() {
        System.out.println("AccountServiceImpl构造方法。。。。");
//        this.accountDao = accountDao;
    }

//    @Autowired //此注解可以省略
//    public AccountServiceImpl(IAccountDao accountDao) {
//        System.out.println("AccountServiceImpl构造方法。。。。");
//        this.accountDao = accountDao;
//    }
}

标签:accountDao,Spring,bean,import,注解,属性,IOC,注入
From: https://www.cnblogs.com/zjw-blog/p/17917882.html

相关文章

  • 【SpringBootWeb入门-16】Mybatis-基础操作-多条件查询操作&XML文件配置SQL
    1、章节回顾上一篇文章我们讲解了Mybatis的增改查操作,本篇继续学习Mybatis的复杂查询操作(多条件查询)。2、增删改查操作-多条件查询操作根据条件姓名、性别、入职时间来查询员工表emp数据,其中员工姓名支持模糊匹配,性别进行精确匹配,入职时间进行范围查询,查询结果按照最后修改时间......
  • 由 RequestBody 注解想到的
    近日初学SpringBoot框架,Post一个接口,返回了:2023-12-19T15:25:38.728+08:00WARN23508---[nio-8080-exec-1].w.s.m.s.DefaultHandlerExceptionResolver:Resolved[org.springframework.web.HttpMediaTypeNotSupportedException:Content-Type'multipart/form-data;bound......
  • spring eureka服务注册配置,排查服务注册上来了,但是请求没有过来。检查是否服务注册配
    springeureka服务注册配置,排查服务注册上来了,但是请求没有过来。检查是否服务注册配置错误解决方法:去掉该配置eureka.instance.hostname=client微服务的提供IP地址//微服务的提供IP地址,点开服务注册的http://xxx:1246,找到服务,点开的是client微服务:微服务端口号,检......
  • SpringAOP之@Transactional处理事务
    跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click引言在现代的Java应用开发中,Spring框架提供了丰富的功能来简化复杂性。其中,事务管理是一个至关重要的部分。@Transactional注解为我们提供了一种便捷的方式来声......
  • Spring中的依赖注入DI
    目录Spring中的依赖注入DISpring中的依赖注入DI依赖注入的简单理解就是给对象设置变量值。Spring配置文件<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSch......
  • Spring Boot学习随笔- 文件上传和下载(在线打卡、附件下载、MultipartFile)
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十二章、文件上传、下载文件上传文件上传是指将文件从客户端计算机传输到服务器的过程。上传思路前端的上传页面:提交方式必须为post,enctype属性必须为multipart/form-data开发后端的Controller后端方法接收参数......
  • spring gateway 超时重试和默认拦截器配置
    spring:cloud:gateway:default-filters:-name:Retryargs:retries:3RetryConfig中默认的异常处理为IOException.class,TimeoutException.classpublicstaticclassRetryConfigimplementsHasRouteId{ privateStrin......
  • Spring创建Bean的三种方式及Bean的生命周期
    目录Spring创建Bean的三种方式及Bean的生命周期Spring创建Bean的三种方式第一种方式:使用默认构造函数创建第二种方式:使用普通工厂中的方法创建对象第三种方式:使用工厂中的静态方法创建对象Bean的生命周期Spring创建Bean的三种方式及Bean的生命周期Spring创建Bean的三种方式第一......
  • springboot051医院管理系统-计算机毕业设计源码+LW文档
    一、立题依据(研究的目的与意义及国内外现状):现如今,互联网的广泛普及与应用,标志着信息化的时代已经到来,管理信息化行业在生活中占据着越来越重要的地位,信息化的服务与管理,大大简化了传统的管理模式,很大程度上,改善了使得人们的生活水平和工作方式。简单的来说医院管理信息化的形式非......
  • springboot053宠物咖啡馆平台-计算机毕业设计源码+LW文档
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于SpringBoot的宠物咖啡馆平台的设计与实现的开发全过程。通过分析基于SpringBoot的宠物咖啡馆平台的设计与实现管理的不足,创建了一个计算机管理基于SpringBoot的宠物咖啡馆......