手撕Spring5框架(四)IOC操作Bean管理(基于注解)

Spring-boot框架使用手册之一——Spring Ioc(基于注解) Spring-boot框架使用手册之一——Spring Ioc(基于注解) 快递100是专业的快递物流互联网平台,为数以亿记的用户提供快递物流的查、寄件服务。快递100的各种服务已经稳定高效的运行了多年,为中国的快递物流行业的快速发展做出了很大的贡献,这一切都离不开背后默默贡献的程序猿们。 从第一个独立站点上线至今,快递100已经走过了10个年头,10年沧海桑田,10年经历了一次又一次的技术、架构升级。今年来,由于spring-boot、spring-cloud技术的兴起,快递100技术团队也开... 阅读详情

什么是注解?

(1)代码里特殊的标记,格式:@注解名称(属性名称=属性值..)

(2)可以在类、方法、属性上添加注解。

使用注解的目的?

可以简化xml配置,使程序变得更简洁、优雅

注解的运用

创建对象提供的注解包含以下4个:

  • @Componet
  • @Service
  • @Controller
  • @Repository

特点:上面四个注解的功能都是一样的,都可以用来创建bean实例,建议使用在对应的功能层次中

注解含义
@Component最普通的组件,可以被注入到spring容器进行管理
@Repository作用于持久层
@Service作用于业务逻辑层
@Controller作用于表现层,Controller类

属性注入提供的注解:

  • @Autowired
  • @Qualifier
  • @Resource
  • @Value

特点:@Autowired、@Qualifier、@Resource可以用于注入对象类型属性,@Value可以用户注入普通类型的属性。

注解含义
@Autowired根据属性类型进行自动装配
@Qualifier根据属性名称进行注入
@Resource可以根据属性、名称进行注入
@Value注入普通类型的属性

基于注解实现创建对象

1)引入依赖

 <!-- spring-aop-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

2)开启组件扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启组件扫描
	base-package属性:设置要扫描的包
	-->
    <context:component-scan base-package="org.leanr.spring5"></context:component-scan>
</beans>

3)类上添加注解

package org.leanr.spring5.service;

import org.springframework.stereotype.Service;

/**
 * 类上增加创建对象的注解
 * - @Componet
 * - @Service
 * - @Controller
 * - @Repository
 * value属性可以不设置,默认是类的名称,首字母小写,
 */
@Service(value = "userService")
public class UserService {
    public void add(){
        System.out.println("addddddd");
    }
}

4)编写测试类

package org.leanr.spring5;

import org.junit.Test;
import org.leanr.spring5.bean.User;
import org.leanr.spring5.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring5 {
    /**
     * IOC操作Bean管理-注解方式创建对象
     */
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userService", UserService.class);
        System.out.println(userService);
        userService.add();
    }


}

测试类执行结果:

org.leanr.spring5.service.UserService@7920ba90
addddddd

组件扫描配置的细节

 <!--use-default-filters属性表示:是否开启默认的filter来扫描包下的内容
     默认是true,如果设置为false,则需要设置指定的规则
     例如下面设置的意思是,注解是@Controller在org.leanr.spring5包下扫描是生效的,其他注解类不会被扫描到
     -->
    <context:component-scan base-package="org.leanr.spring5" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
</beans>

基于注解实现属性的注入

第一步注解方式创建对象

第二步在类中注入外部属性,并添加属性的注解

1)@Autowired

@Service(value = "userService")
public class UserService {
    //注入属性的注解@Autowired,根据属性类型自动装入
    @Autowired
    private UserDao userDao;
    public void add(){
        System.out.println("userService add");

        userDao.add();
    }

2)@Qualifier

根据属性名称进行注入

/**
 * UserDao的实现类
 */
@Repository(value = "userDaoImpl2")
public class UserDaoImpl implements UserDao {
    public int add() {

        System.out.println("UserDaoImpl add ");
        return 1;
    }
}
@Service(value = "userService")
public class UserService {
    //注入属性的注解@Autowired,根据属性类型自动装入
    @Autowired
    @Qualifier(value = "userDaoImpl2")
    private UserDao userDao;
    public void add(){
        System.out.println("userService add");

        userDao.add();
    }

3)@Resource

既可以根据类型也可以名称注入

@Service(value = "userService")
public class UserService {
    //注入属性的注解@Autowired,根据属性类型自动装入
    //@Autowired
    //@Qualifier(value = "userDaoImpl2")
    //@Resource  //根据类型注入
    @Resource(value="userDaoimpl2")  //根据名称注解
    private UserDao userDao;
    public void add(){
        System.out.println("userService add");

        userDao.add();
    }

4)@Value

针对普通类型的属性注入

@Value(value = "zhangsan")
    private String userName;

纯注解开发

1)创建配置类,替代xml配置文件

package org.leanr.spring5.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
//Configuration,让Spring知道这是个配置类
@Configuration
@ComponentScan(basePackages = {"org.leanr.spring5"})
public class SpringConfig {
}

2)编写测试类

/**
     * 完全注解开发
     */
    @Test
    public void test3(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService userService = context.getBean("userService", UserService.class);
        userService.add();
    }

 

解读Spring对IOC和AOP的设计实现原理 站在巨人的肩膀上前行。模仿Spring对于IOC和AOP的处理思路,自定义注解实现了对bean的扫描、依赖注入和事务管理。 阅读详情

相关推荐

飞塔防火墙CVE-2022-40684漏洞复现:手把手教你搭建靶场环境(附调试技巧)

本文详细指导如何搭建Fortinet飞塔防火墙CVE-2022-40684认证绕过漏洞的靶场环境,涵盖虚拟机部署、网络配置、调试模式开启及漏洞原理分析。通过手把手教程,读者可掌握漏洞复现与深度调试技巧,深入理解该认证绕过漏洞的利用与防御。

h6i7j8的博客 693

spring IOC容器 Bean 管理——基于注解方式

IOC 操作 Bean 管理(基于注解方式) ​ 1、什么是注解 ​ (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…) ​ (2)使用注解,注解作用在类上面,方法上面,属性上面 ​ (3)使用注解目的:简化 xml 配置 ​ 2、Spring 针对 Bean 管理中创建对象提供注解 ​ 下面四个注解功能是一样的,都可以用来创建 bean 实例 ​ (1)@Component ​ (2)@Service ​ (3)@Controller ​ (4)@Repository

学而时习 1万+

【故障处理】- ORA-01722

在执行升级脚本@?/rdbms/admin/catupgrd.sql时报错ora-01722。

weixin_39099660的博客 854

Spring5之IOC操作Bean管理(基于xml和注解)

前几天Spring框架曝出RCE 0day漏洞,可导致远程代码执行 (RCE),使用JDK9及以上版本都有可能受到影响,还好博主用的是稳定的JDK8(JDK8真的是yyds)。本篇文章主要介绍一下spring核心之一的IOC/DI以及他们是如何通过XML和注解的方式实现Bean管理。 一、Spring的核心 Spring是轻量级的开源JavaEE框架,Spring主要用到的设计模式有工厂模式和代理模式,一般而言,工厂模式分为三类:简单工厂模式(Simple Factory)、工厂方法模式(F..

静水流深,沧笙踏歌 2307

Latex | IEEE双栏排版中长公式的排版

IEEE双栏排版中,有时候公式过于长了,过宽,导致单栏排版不下。

qq_43466146的博客 1万+

Open3D DBSCAN聚类

DBSCAN算法做为一种有名的密度聚类算法,它是通过邻域参数(Distance,MinPts)来刻画样本分布的紧密程度。而在真正开始之前,首先要理解下面这几个概念:更为具体的内容也可参考这篇文章点云DBSCAN聚类算法。...

dayuhaitang1的博客 1794

spring5(四):IOC 操作 Bean 管理(基于注解方式)

注解是代码特殊标记,@注解名称(属性名称=属性值, 属性名称=属性值..)使用注解,注解作用在类上面,方法上面,属性上面使用注解目的:简化xml配置和XML配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记。

weixin_52533007的博客 1339

网络速度的极致:800G & 1.6T 以太网的突破!

你好,这里是网络技术联盟站。在我们进入数据驱动的世界时,以太网的重要性日益突出。从根本上说,以太网是一种连接计算机的技术,旨在形成一个本地网,通过它,设备可以与其他设备进行通信。然而,随着时间的推移,以太网已经发展成为一种全球的数据通信系统,其速度从初始的10Mbit/s发展到现在的800G,甚至1.6T。这种巨大的进步并不是没有挑战的,但每一次的突破都代表了技术的巨大飞跃。本文将探讨800G和1.6T以太网的创新与挑战。

网络技术联盟站 1769

【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean

Spring 最大的价值,通过配置,给程序提供需要使用的web 层

qq_74232707的博客 2657

风险登记册vs问题日志:项目经理必须掌握的区别与应用

在项目管理的世界里,风险登记册和问题日志就像是项目经理的两个得力助手。我们的目的就是要搞清楚这两个助手各自的特点、区别以及如何在项目中好好使用它们。范围涵盖了项目从启动到结束的整个过程,无论是小项目还是大项目,都能从对这两个工具的正确使用中受益。我们先会用有趣的故事引出风险登记册和问题日志的概念,然后像给小学生讲故事一样解释它们是什么。接着分析它们之间的关系和区别,再用代码示例模拟它们在项目中的应用,之后介绍实际的应用场景、推荐相关工具和资源,探讨未来的发展趋势和挑战。

项目管理的博客 871

WPS文档中心和文档中台 operate 未授权访问漏洞(CVE-2025-0717)

WPS文档中心和文档中台的/open/v6/api/etcd/operate?key=/config/storage&method=get接口存在未授权访问漏洞,攻击者可通过该漏洞获取AK/SK密钥等信息,这些密钥通常用于系统内部认证和权限控制,泄露后可能导致攻击者进一步修改K8s配置、部署恶意容器或执行远程命令,最终实现对系统的完全控制。

李同學AI安全 900

Spring4-IoC2-基于注解管理bean

从 Java 5 开始,Java 增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。元素开启 Spring Beans的自动扫描功能。开启此功能后,Spring 会自动从扫描指定的包(base-package 属性设置)及其子包下的所有类,如果类上使用了 @Component 注解,就将该类装配到容器中。Spring 从 2.5 版本开始提供了对注解技术的全面支持,我们可以使用注解来实现自动装配,简化 Spring 的 XML 配置。

m0_73902080的博客 2161

基于Python的股票K线图爬取与形态识别系统

本文详细介绍了一个基于Python的股票K线图爬取与形态识别系统。该系统通过网络爬虫技术获取股票历史数据,使用Matplotlib生成K线图,并应用卷积神经网络(CNN)对经典K线形态进行识别。文章详细阐述了数据采集、K线图生成、CNN模型构建与训练的完整流程,并提供了完整的代码实现。本研究为金融科技领域的毕业设计提供了有价值的参考方案。关键词:Python爬虫、K线图、卷积神经网络、形态识别、股票交易。

2201_76125261的博客 1032

Spring6-基于注解管理Bean / 手写IOC

在Spring框架中,当我们开发一个应用程序时,我们会有很多类,比如处理业务逻辑的类、连接数据库的类以及处理用户请求的类等等。为了让Spring框架能够管理和使用这些类,我们需要将它们注册到Spring的容器(IoC容器)中。就像我们要把各种工具都放在工具箱里以便随时取用一样,Spring也需要一个地方存放和管理这些类,这个地方就是IoC容器注解说明@Component。

sakurapaid的博客 1887

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Spring】IoC详解:五大类注解、类Bean的存储(上)

在Spring的魔法世界中,IoC如同智能管家般接管对象生命周期的奥秘。本文以生动比喻揭示控制反转本质——就像观众无需自备放映设备,开发者只需专注业务逻辑,让Spring容器智能调度对象创建。深度拆解五大核心注解@Controller、@Service、@Repository、@Configuration与@Component的"身份密码",通过20+代码实例演示分层架构中Bean的存储艺术。从ApplicationContext的三种取Bean绝技,到注解源码的"家族基因"解析。

Code哈哈笑的博客 1724

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)

根据指定装配规则(属性名称或者属性类型),Spring 自动将匹配的属性值进行注入(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)(2)使用注解,注解作用在类上面,方法上面,属性上面(3)使用注解目的:简化 xml 配置Spring。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 3万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【 手撕Java源码专栏 】Spirng篇之手撕SpringBean:(包含Bean扫描、注册、实例化、获取)

本文先演示原生 Spring Bean 扫描与创建,剖析其扫描、注册、实例化、获取流程;再详述手写 Spring 框架的实现思路与核心代码,对比两者差异,助力理解 Spring 容器核心原理与反射等技术应用。

Varin 1226

Spring框架(一)Spring IOC容器以及Bean管理

IOC -- Inverse of Control,控制反转,将对象的创建权力反转给Spring框架!在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题。Spring 将创建对象的权利给了IOC,在IOC当中创建了ABC三个对象吗,那么我们我们其他的类只需要调用集合, 大大的解决了程序耦合性的问题。

jukuya的博客 1155

四、Spring IoC实践和应用(基于注解方式管理 Bean)

● 基于注解方式管理 Bean ○ 实验一: Bean注解标记和扫描 (IoC) ○ 实验二: 组件(Bean)作用域和周期方法注解 ○ 实验三: Bean属性赋值:引用类型自动装配 (DI) ○ 实验四: Bean属性赋值:基本类型属性赋值 (DI) ○ 实验五: 基于注解+XML方式整合三层架构组件

走在bug的路上 6701

Spring框架Bean管理-注解

使用注解来实现SpringBean管理

hefangxuxing的博客 3232

Spring框架及Spring IoC核心容器介绍

SpringIoC核心容器介绍及其使用方式,推荐注解+配置类!!

weixin_44525733的博客 2514

④【Spring】IOC - 基于注解方式 管理bean

》》》一文掌握 -- 基于注解管理Bean

ebb29bbe的博客 872

手撕Spring5框架(三)IOC操作Bean管理(基于XML)

什么是Bean管理? 通常是指依据Spring进行的两个操作: 1)Spring创建对象 2)Spring注入属性 Bean管理的两种实现方式: 基于XML方式 基于注解方式 IOC操作Bean管理(基于XML) 基于xml方式创建对象 在之前入门案例章节我们已经初步认识了Spring基于xml方式创建对象。 <!--通过Spring配置User对象--> <bean id="user" class="org.learn.spring5.User"

路人甲的专栏 448

Spring-容器:IOC-基于注解管理Bean

简介​ 从 Java 5 开始,Java 增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。​ Spring 从 2.5 版本开始提供了对注解技术的全面支持,我们可以使用注解来实现自动装配,简化 Spring 的 XML 配置。步骤引入依赖开启组件扫描使用注解定义 Bean依赖注入使用注解。

qq_45606619的博客 1021

Spring框架中的Bean

Spring中的Bean是一个非常重要的概念,它可以帮助我们将对象的创建和管理与业务逻辑分离。在Spring中,我们可以使用XML配置文件或注解来创建和管理Bean实例,同时还可以指定Bean实例的作用域,以控制Bean实例的生命周期。希望本篇博客可以帮助大家更好地理解Spring中的Bean,同时也可以通过代码实践来加深对Bean的理解。

chao的博客 6132

深入解析Spring框架之IoC容器

IoC(Inversion of Control,控制反转)是一种编程原则,它的核心思想是将程序的控制权从组件内部转移到外部。在传统的程序设计中,组件(如类或模块)通常负责创建或查找其依赖的其他组件。而在IoC架构中,这些依赖关系由外部容器(如Spring IoC容器)来管理和注入,组件不再负责查找其依赖,而是依赖于外部容器来提供这些依赖。实例化Bean:IoC容器负责创建Java对象的实例。开发者可以通过配置文件或注解来指定哪些类应该被实例化。依赖注入:IoC容器通过依赖注入(Dependenc

鱼干的博客 3259
上一篇: 重磅首发!学习Spring5看这一篇就够了,完整思维导图
下一篇: 手撕Spring5框架(五)AOP介绍
不善^
博客等级 码龄18年 635粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值