Spring之ioc注解

【Spring】注解实现IOC操作,你理解了吗? 前面讲解了IOC的基本概念以及操作演示,但是spring配置文件较多,操作起来相对麻烦。今天我们使用注解来操作实现IOC的功能。基于注解式开发spring,相对来说比较少,但是理解这些注解的作用,会对后面学习spring boot产生比较大的影响。所以还是应该重视一下,多用多做就能掌握啦。今天的分享到此结束,我是狮子,希望可以帮到您。 阅读详情

基于注解实现ioc注解

对于 DI 使用注解,将不再需要在 Spring 配置文件中声明 bean 实例。Spring 中使用注解,需要在原有 Spring 运行环境基础上再做一些改变。
作用:使用注解替代配置文件,方便管理
缺点:源代码加入大量注解会有些凌乱

1.声明Bean的注解 @Component

在类上添加注解@Component表示该类创建对象的权限交给Spring容器。注解的value属性用于指定 bean的id值,value可以省略。
@Component 不指定 value 属性,bean 的 id 是类名的首字母小写

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:aop="http://www.springframework.org/schema/aop"
       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/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启注解扫描-->
    <!--要扫描多个包之间可以使用空格,“,”,“;”分割
    <context:component-scan base-package="com.kkb.spring.po;com.kkb.spring.dao;com.kkb.spring.service;com.kkb.spring.controller"></context:component-scan>
    -->
    <!--指定父包的形式来扫描多个包-->
    <context:component-scan base-package="com.lr.spring."></context:component-scan>
</beans>

使用多个context:component-scan指定不同的包路径

多个包扫描,可以用空格或者逗号或者分号进行隔离,三种方式都可以用,不建议使用直接扫描父包的形式来扫描多个包。极限开发原则,因为会消耗性能。

第二步:加入注解

在User中加入注解@Component的作用相当于加入这样的标签

import org.springframework.stereotype.Component;

import java.io.Serializable;
//在类上添加注解@Component表示该类创建对象的权限交给Spring容器。注解的value属性用于指定bean的id值,value可以省略。
//@Component 不指定 value 属性,bean 的 id 是类名的首字母小写
@Component
//<bean id="user" class="com.kkb.spring.po.User">
public class User implements Serializable {
    public Integer id;
    private String name;
    private String password;

 第三步:测试效果

    @Test
    public void test05(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        User user = (User) context.getBean("user");
        System.out.println(user);
    }

 修改注解

@Component(value = "user1")

 运行程序报错

 没有找到user类型

说明参数对应的值是注解的value值

3.其他注解

除@Component 之外,Spring中还提供了其他3个用于创建对象的注解:
@Repository : 用于dao实现类的的注解
@Service: 用户service实现类的注解
@Controller: 用于controller实现类的注解
这三个注解与@Component 都可以创建对象,但这三个注解还有其他的含义,@Service创建业务层对 象,业务层对象可以加入事务功能,@Controller 注解创建的对象可以作为处理器接收用户的请求。
@Repository,@Service,@Controller 是对@Component 注解的细化,标注不同层的对象。即持久层对象,业务层对象,控制层对象。
在各类添加不同的注解
package com.lr.spring.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserDaoImpl implements UserDao {
    @Override
    public void addUser() {
        System.out.println("Dao中输入User对象");
    }
}


package com.lr.spring.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserMySQLDaoImpl implements UserDao {
    @Override
    public void addUser() {
        System.out.println("MySQLDa");
    }
}

package com.lr.spring.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserOracleDaoImpl implements UserDao {
    @Override
    public void addUser() {
        System.out.println("OracleDao");
    }
}


package com.lr.spring.controller;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {
}


package com.lr.spring.service;

import org.springframework.stereotype.Service;
//接口上不起作用
@Service
public interface UserService {
    void addUser();
}

测试

    @Test
    public void test05(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        UserController userController = (UserController) context.getBean("userController");
        System.out.println(userController);
        UserMySQLDaoImpl userMySQLDao = (UserMySQLDaoImpl) context.getBean("userMySQLDaoImpl");
        System.out.println(userMySQLDaoImpl);

    }

测试service类

   UserService userService=(UserService) context.getBean("userService");
        System.out.println(userService);

 报错没有bean的名字是UserService

这些注解本质上跟@Component一样,只能在类上修饰而UserService是一个接口,我们要把注解@Service放到实现类中,在重新给它一个value值userService就可以了

mport com.lr.spring.dao.UserDao;
import com.lr.spring.dao.UserDaoImpl;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserService {
//    private UserDaoImpl userDao = new UserDaoImpl();
    private UserDao userDao;

    //set注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

 ps:@Component("user1")等价于@Component(value = "user1")

只有一个值,value可以省略

4.属性注入@Vaule

需要在属性上使用注解@Value,该注解的 value 属性用于指定要注入的值。使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。
package com.lr.spring.po;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.Serializable;
//在类上添加注解@Component表示该类创建对象的权限交给Spring容器。注解的value属性用于指定bean的id值,value可以省略。
//@Component 不指定 value 属性,bean 的 id 是类名的首字母小写
@Component(value = "user1")
//<bean id="user1" class="com.kkb.spring.po.User">
public class User implements Serializable {
    @Value("1000")
    public Integer id;
    @Value("龙仁")
    private String name;
    @Value("1380341")
    private String password;

 测试效果

@Test
    public void test05(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        User user = (User) context.getBean("user1");
        System.out.println(user);
    }

}

 

4 @Autowired和@Qualifier

      ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        User user = (User) context.getBean("user1");
        System.out.println(user);
        UserService userService=(UserService) context.getBean("userService");
        System.out.println(userService);
                //空指针异常
        userService.addUser();

 

我们可以拿到这个 userService对象,但是调用add方法后,发生空指针异常,原因是程序走到这的时候,接口还是无法识别注解

我们需要在UserServiceImpl的逻辑处加入@Autowired  自动装配   这个注解

@Service("userService")
public class UserServiceImpl implements UserService {
//    private UserDaoImpl userDao = new UserDaoImpl();
    //自动装配
    @Autowired
    private UserDao userDao;

 但是此时注意@Autowired的默认属性是byType 类型匹配 

程序依旧会报错因为我们有三个bean(三个实现类),他不知道该找哪个?

@Autowired
    @Qualifier("userMySQLDaoImpl")
    private UserDao userDao;

组合注解 相当于把 byType改成byName

 

byType自动注入@Autowired

 需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式。使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。

byName自动注入@Autowired和@Qualifier
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配
的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。
@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值
设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。

 

别再只会用QTcpSocket了!手把手教你用QSslSocket为你的Qt网络应用加上SSL/TLS加密(附完整代码示例) 本文详细介绍了如何将Qt网络应用从QTcpSocket迁移到QSslSocket,实现SSL/TLS加密传输。通过对比API差异、解析核心机制和提供完整代码示例,帮助开发者快速掌握安全网络编程技巧,有效防范数据窃听和中间人攻击等安全风险。 阅读详情

相关推荐

Ascend C 算子开发遇到的问题及解决方法

在学习Ascend C算子开发进阶课程的时候,进行Ascend C自定义算子工程、算子调用等实验,在开发环境中遇到了一些问题,在这里记录一下。首先如果在启智社区CANN版本为6.3 ,要进行Ascend C算子开发,需要更新CANN版本。

qq_45257495的博客 5109

SpringIOC常用注解

Spring-IOC常用注解 1.1、@Configuration: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Configuration { /** * Explicitly specify the name of the Spring bean definition associated with the * {@code @Co

qq_44134480的博客 2010

Win11专业版破解RDP限制:实现多用户远程桌面协同办公

本文详细介绍了如何在Windows 11专业版上破解RDP限制,实现多用户远程桌面协同办公。通过使用RDPWrap工具,用户可以绕过微软的授权限制,允许多个用户同时登录同一台电脑,提高硬件利用率和团队协作效率。文章包含详细的安装配置步骤、性能优化技巧及常见问题解决方案,适用于需要远程协作的办公场景。

weixin_33806300的博客 466

Spring-IoC-注解篇

Spring-IoC-注解篇注解驱动开发常用注解@Configuration示例@ComponentScan示例@Bean示例@Import示例@PropertySource说明示例注解驱动开发之注入时机和设定注入条件的注解@DependsOn示例@Lazy示例@Conditional说明示例用于创建对象的注解@Component和三个衍生注解说明用于注入数据的注解@Autowired说明@Qualifier说明@Resource说明@Value说明@Inject@Primary和生命周期以及作用范围相关的

输入技术、输出想法 1460

【谷粒商城】分布式事务与下单

=购物车== 构建gulimall-cart,复制静态资源到nginx,修改网关 购物车分为离线购物车和登录购物车 离线购物车重启浏览器了也还有 1、购物车需求 特点:读多写少,放入数据库并不合适 登录状态:登录购物车 放入数据库 mongodb 放入redis(采用) 登录以后,将离线购物车里合并后清空离线购物车 未登录状态:离线购物车 放入localstorage浏览器的技术 cookie WebSQL 放入redis(采用) 浏览器重启后还在 2、购物车VO (1) 数据结构分析

努力充实,远方可期 1万+

5分钟搞懂基因组规模代谢网络(GSMM):从数据库选择到模型构建全流程

本文详细解析基因组规模代谢网络(GSMM)构建的全流程,从数据库选择到模型优化。重点介绍MetaCyc、BiGG等主流数据库的黄金三角评估法则,对比自上而下与自下而上两种建模方法,并提供模型修剪、仿真优化的实用技巧与避坑指南,帮助研究者高效构建精准代谢网络模型。

weixin_30872157的博客 137

03. SpringIOC的注解应用

03SpringIOC的注解应用 ​ 在之前的项目中,我们都是通过xml文件进行bean或者某些属性的赋值,其实还有另外一种注解的方式,在企业开发中使用的很多,在bean上添加注解,可以快速的将bean注册到ioc容器。 1、使用注解的方式注册bean到IOC容器中 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schem

weixin_48377011的博客 480

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

04 Spring 注解实现IOC

注解配置和xml配置对于Spring的IOC要实现的功能都是一样的,只是配置的形式不一样。

m0_51697147的博客 719

Zynq UltraScale+ RFSoC实战:用XCZU49DR开发板实现雷达信号处理全流程

本文详细介绍了如何利用Xilinx Zynq UltraScale+ RFSoC系列中的XCZU49DR开发板,高效实现雷达信号处理全流程。文章深入剖析了该芯片集成的射频直采ADC/DAC、可编程逻辑与Arm多核处理器的异构计算优势,并通过实战案例展示了从环境搭建、硬件链路设计到软件优化的完整开发路径,为相控阵雷达等高性能应用提供了单芯片解决方案。

weixin_29291863的博客 578

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

spring之IoC注解

注解的存在主要是为了简化XML的配置

qq_42338744的博客 867

【AI产品与商业航图】Flux.1 完全开源 AI 绘图模型:本地部署与 ComfyUI 实战指南

Flux.1是一个开源项目,用户可以自由使用和修改,完全免除使用费用。🖥️本地部署支持:与一些依赖云端计算的工具不同,Flux.1支持本地部署,确保用户可以离线使用并自主控制数据隐私。🔄兼容ComfyUI框架:Flux.1可以无缝集成到ComfyUI中,用户可以享受更加简便和直观的操作界面。🎨卓越的图像生成能力:Flux.1能够生成高质量、细腻的图像,支持多种风格与创作主题的切换。💾低硬件要求。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1737

Spring IoC注解详解

这篇文章记录Spring IoC通过注解注入属性的方法。一、注解注入属性一个简单的案例1)Spring配置文件引入context约束&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cont...

lzgsea的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring 框架 IOC 注解

在 Spring 框架中,控制反转(IOC)是核心思想之一。传统 XML 配置方式虽能实现 IOC,但存在配置繁琐、维护成本高的问题。而通过代码注解直接声明 Bean 及其依赖关系,大幅简化开发流程,成为现代 Spring 开发的主流选择。本文将系统讲解 IOC 注解的核心用法、常用注解及纯注解架构实践。

m0_61261153的博客 1161

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

学而时习 1万+

Spring IOC的注解配置

Spring IOC的注解配置 (一)简述 上回说到,我们可以使用书写XML配置文件的方式来让spring产生我们需要的Bean对象,并放入容器中。但是,书写配置文件是一件非常繁琐的事情,而且一旦配置文件内容很多,阅读起来也是一件让人头疼的事,所以,我们急需一种部分或者完全摆脱配置文件的配置方式。 下面我们就来看看spring的注解配置方式。注解配置和用配置文件配置相比,只是配置的形式不一样,最终达到的目的是基本相同的。就好比坐飞机去北京和坐高铁去北京,虽然使用的交通工具不一样,但是都达到了去北京的目的。

物是人非,结局始终不美 1万+

Spring 基于注解的IOC

1、曾经xml的配置 <bean id="accountService" class="com.spring.service.Impl.IAccountServiceImpl" scope="" init-method="" destroy-method=""> <property name="" value="" / ref=""></proper...

Zystem 1837

Spring基于注解的IOC学习总结

基于注解的IOC使用和基于XML方式的IOC的使用功能是一模一样的,只是注解方式是另一种使用方式而已,通过使用注解,可以完成相关的声明和配置。 先介绍一下XML和注解混合使用的情况,然后再改进为全注解的形式。 IOC的配置 首先,在pom.xml文件中,导入Spring IOC相关的约束和依赖。 例如: <?xml version="1.0" encoding="UTF-8"?> &...

rotation博客 510

Spring基于注解的IOC

Spring基于注解的IOC 今天主要分享4类注解 用于创建对象的 用于注入数据的 用于改变作用范围的 和生命周期相关的 在使用注解的时候,我们需要在主配置文件中加入相应关于注解的约束,然后需要告知spring在创建容器时候需要扫描的包. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://ww

qq_49044908的博客 617

Spring IoC常用注解

Spring IoC容器 Spring IoC(Inversion of Control,控制反转)是Spring Framework的最核心的部分。 所谓控制反转,是指通过使用IoC容器对象依赖关系的管理被反转了,也就是说,对象之间的依赖关系由IoC容器进行管理,并且由Ioc容器通过依赖注入(DI,Dependency Injection)的方式来完成对象的注入。   在

raiet 2022

Spring基于注解使用IOC

基于注解的IOC

怪咖@的博客 1624

spring的IOC的注解

这里是修真院后端小课堂,每篇分享文从 八个方面深度解析后端知识/技能,本篇分享的是: 【spring的IOC的注解】 【修真院java小课堂】spring的IOC的注解 开场语: 大家好,我是IT修真院上海分院第10期的学员洪阳,今天给大家分享一下,修真院官网java任务1,深度思考中的知识点——spring的IOC的注解. (1)背景介绍: 传统的xml配置完成IOC,如果内容比较多则配置需花费...

learning__java的博客 158

如何使用Spring IOC的注解进行开发

Spring IoC(Inversion of Control,控制反转)容器通过提供了一种简洁且强大的方式来进行依赖注入和配置管理。开发使得 Spring 应用程序的配置更为简洁和直观,减少了 XML 配置的冗余和复杂性。本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作。

lovellsj的博客 1543

Spring基于注解的IOC配置

学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。

w2144217940的博客 1154

Spring入门第五讲——Spring IoC的注解开发

还记得在《Spring入门第三讲——Spring中Bean的配置与管理以及分模块开发的配置》这一讲中,我说过Spring进行Bean的管理有两种方式吗?其中一种是使用配置文件的方式,这个我们已经讲过了,还有一种是使用注解的方式,本讲就来讲一下Spring IoC的注解开发。那啥是注解呢?注解是代码中的特殊标记,它可以使用在类、方法、属性上面,使用它可以实现一些基本的功能,其写法是@注解名称(属性=...

李阿昀的博客 3334

Spring基于注解的IOC以及IOC的案例

使用Spring的IOC实现账户的CRUD 1.spring中ioc的常用注解 2.案例使用xml方式和注解方式实现单表的CRUD操作 持久层技术选择:dbutils 3.改造基于注解的IOC案例,使用纯注解的方式实现 spring的一些新注解使用 4.spring和junit整合 创建数据库 create table account( id int primary key auto_increment, name varchar(40), money float )character

骑着蜗牛行天下 265
上一篇: Spring之ioc控制反转
下一篇: Spring核心之代理模式
continueLR
博客等级 码龄6年 9粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值