spring 学习路线梳理(二)注解

1.通过注解的方式创建bean
  1.1 定义dao层的接口和实现
public interface ILoginDao {public String login();
}@Slf4j
@Repository
public class LoginDaoImpl implements ILoginDao {public LoginDaoImpl(){System.out.println("spring create bean call");}@Overridepublic String login() {log.info("{}","login validator send  dao");return "login success !!!";}
}
1.2 定义service层的接口和实现
public interface ILoginService {public String login();
}@Slf4j
@Service("loginService")
public class LoginServiceImpl implements ILoginService , InitializingBean, DisposableBean {public ILoginDao iLoginDao;//    //通过set方法 注入 需要的dao
//    public void setiLoginDao(ILoginDao iLoginDao) {
//        this.iLoginDao = iLoginDao;
//    }
//    构造器注入LoginServiceImpl(ILoginDao iLoginDao){this.iLoginDao = iLoginDao;}@Overridepublic String login() {log.info("{}","login validator send service");iLoginDao.login();return "login success !!!";}//销毁之前的操作@Overridepublic void destroy() throws Exception {System.out.println("destroy");}//初始化之前的操作@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("afterPropertiesSet");}
}

@Component  组件注解 下面又有3个衍生注解

    定义dao的是 @Repository 

    定义service的是  @Service("loginService")  // 可以指定value,如果没有指定需要按照类型从容器中取bean

   定义controller的是 @Controller

1.3 在xml文件中配置需要扫描的包

引入扫描的 空间 context ,定义扫描的包

1.4 获取容器,从容器中拿到需要的bean
public class SpringSecurityDemoApplication {public static void main(String[] args) {//SpringApplication.run(SpringSecurityDemoApplication.class, args);ClassPathXmlApplicationContext xct= new ClassPathXmlApplicationContext("applicationContext.xml");ILoginService bean = (ILoginService) xct.getBean("loginService");String login = bean.login();System.out.println(login);xct.close();}}

如果没有在注解中指定别名,获取bean的时候会报错。需要通过类型获取bean

service注解中指定的别名注释掉

获取bean的时候按照别名获取

下面是报的错误

通过类型获取 (正常)

2.从spring 3.0开始纯注解开发,没有xml配置

将xml中的配置全部用注解的方式替换

2.1定义一个配置类
@Configuration //定义注解的配置类
@ComponentScan("com.drawing") //定义需要扫描的包
public class SpringConfig {
}
2.2 将获取容器的实现类换成通过注解的方式获取

2.3 运行正常

创建bean的方式没有变化,通过构造方式创建

2.4通过注解方式处理初始化之前的操作和销毁之前的操作

2.4 需要按照单利或多例创建类,只需要在类上加入 
@Scope("prototype") 注解指定就可以

3.自动注入需要的bean

@Slf4j
@Service
public class LoginServiceImpl implements ILoginService {//@Autowiredpublic ILoginDao iLoginDao;//    //通过set方法 注入 需要的dao
//    public void setiLoginDao(ILoginDao iLoginDao) {
//        this.iLoginDao = iLoginDao;
//    }
//    构造器注入LoginServiceImpl(ILoginDao iLoginDao){this.iLoginDao = iLoginDao;}@Overridepublic String login() {log.info("{}","login validator send service");iLoginDao.login();return "login success !!!";}
}

  留下构造器,将@Autowired注释掉可以正常运行

   将构造器和@Autowired同时注释掉,只留下 set方法 提示空指针异常,dao没有注入

   将 @Autowired  留下 构造器注释掉 是可以正常注入成功。

总结:可以通过构造器注入或者 @Autowired 加set方法注入(简写只留下@Autowired不写set方法也可以)。

4.有多个实现类的方式

4.1 定义多个dao的接口和实现
public interface ILoginDao {public String login();
}实现 类 1
@Slf4j
@Repository("ILoginDao1")
public class LoginDaoImpl implements ILoginDao {public LoginDaoImpl(){System.out.println("spring create bean call");}@Overridepublic String login() {log.info("{}","login validator send  dao 1");return "login success !!!";}
}实现 类 2@Slf4j
@Repository("ILoginDao2")
public class LoginDaoImpl2 implements ILoginDao {public LoginDaoImpl2(){System.out.println("spring create bean call");}@Overridepublic String login() {log.info("{}","login validator send  dao 2");return "login success !!!";}
}
4.2 service中的注入 编译报错

4.3 定义多个dao层的实现执行报错,提示不是唯一的

   

4.4 解决

 在service注入中加入 @Qualifier 指定注入bean的名称

5.注解管理第三方的bean

定义bean

在spring的配置文件中导入bean,就是添加到容器中。剩下就是注入使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blender进阶:着色器节点

11 着色器节点 11.1着色器 着色器Shader,负责给物体表面着色。 综合以下参数: -基础色-金属度、粗超度、透明度-法向-入射光颜色、强度、角度。。 着色器本质上是一段程序、算法,即着色器编程。 在节点编辑器中,支持算法的可…

状态检测防火墙报文处理发流程

华为大同:全系列状态检测防火墙报文处理流程 华为防火墙在处理报文时,其核心在于其状态检测与会话机制:当防火墙接收到报文后,它会在特定时间和条件下创建会话,并对那些与会话表匹配的报文进行特定的转发处理。基于这一…

深入探讨SEO分析技巧助力网站流量提升

内容概要 在当前的数字化时代,SEO分析的重要性不言而喻。它是提升网站流量的关键工具,帮助站长有效地优化网站内容和结构。通过系统的SEO分析,站长可以掌握用户搜索行为和需求,从而制定出更具针对性的内容策略。例如,…

【天线&通讯】电力设施检测系统源码&数据集全套:改进yolo11-RFCAConv

改进yolo11-DAttention等200全套创新点大全:电力设施检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者…

18.农产品销售系统(基于springboot和vue的Java项目)

目录 1.系统的受众说明 2.开发环境与技术 2.1 Java语言 2.2 MYSQL数据库 2.3 IDEA开发工具 2.4 Spring Boot框架 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信…

uni-app发起请求以及请求封装,上传及下载功能(六)

文章目录 一、发起网络请求1.使用及封装2. https 请求配置自签名证书3.拦截器 二、上传下载1.上传 uni.uploadFile(OBJECT)2. 下载 uni.downloadFile(OBJECT) 一、发起网络请求 uni-app中内置的uni.request()已经很强大了,简单且好用。为了让其更好用,同…

地理信息科学专业想搞GIS开发:学前端还是后端?

地理信息科学专业的同学是学前端开发比较好呢还是学后端开发比较好呢? 部分网友:学前端更好 主修前端更好,因为地信学后端,是卷不赢学计算机的 本科卷前端,硕士阶段可以卷后端 甚至有网友直呼,地信根本没有…

美格智能5G车规级通信模组:以连接+算力驱动智能化进阶

2023年3月,基于高通公司第二代骁龙汽车5G调制解调器及射频系统平台SA522M/SA525M,美格智能在德国纽伦堡嵌入式系统展上正式发布全新一代5G车规级C-V2X通信模组MA922系列,迅速引起行业和市场关注。随着5G高速网联逐步成为智能汽车标配&#xf…

win11不好用怎么退回win10_win11退回win10多种方法

最近有网友问我win11不好用怎么退回win10?win11感觉不好用,很多用户这时候想退回win10系统。电脑安装Win11系统觉得操作起来不太习惯,想要重新回到上一个系统,有什么办法实现?其实,微软也在Win11中准备了回退功能,让用…

「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现

自定义动画让开发者可以设计更加个性化和复杂的动画效果,适合表现独特的界面元素。鸿蒙提供了丰富的工具,支持通过自定义路径和时间控制来创建复杂的动画运动。本篇将带你学习如何通过自定义动画实现更多样化的效果。 关键词 自定义动画动画路径贝塞尔曲线动画控制一、Animat…

【分立元件】贴片电阻过电压故障机理

在文章:【分立元件】贴片电阻器的故障现象和原理 中我们讲到电阻故障现象类型。其中包括了由电气过载导致的电阻体烧损。 在文章:

ubuntu-开机黑屏问题快速解决方法

开机黑屏一般是由于显卡驱动出现问题导致。 快速解决方法: 通过ubuntu高级选项->recovery模式->resume->按esc即可进入recovery模式,进去后重装显卡驱动,重启即可解决。附加问题:ubuntu的默认显示管理器是gdm3,如果重…

Java已死,大模型才是未来?

作者:不惑_ 引言 在数字技术的浪潮中,编程语言始终扮演着至关重要的角色。Java,自1995年诞生以来,便以其跨平台的特性和丰富的生态系统,成为了全球范围内开发者们最为青睐的编程语言之一 然而,随着技术的…

24小时跑2W+销售额,本地生活+数字人直播模式真好用!

本地生活AI数字人直播的模式已经火热了一段时间了,但依旧有商家还不清楚这个模式到底好不好用?这里我就给大家稍微讲解下这种模式驱动下,对于商家来说究竟会有哪些好处。 先给大家看看已经跑了20多小时的两个数字人直播间,可以看到…

基于LLaMA Factory对LLama 3指令微调的操作学习笔记

一、环境 在vscode中用连接云服务器,打开文件目录。 df -h #查看盘容量 二、下载LLaMA Factory框架和数据 下载LLaMA Factory到云服务器 git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e . pip install -e .命令的含…

钢琴曲相关

黑键大调问题 等音调,等音的调式化 通常用bE大调来形容,毕竟只有四个# #D大调不常用,但不是不会用 重点是是要交流的,而交流是需要简洁的 ,于是乎,一组七音,的12个键,每个里面都会…

启用 iPhone 原生的五笔输入

聊聊如何在 iOS 中使用原生的五笔输入法 本文虽然介绍的是如何添加五笔键盘,其实其他键盘(双拼,外语键盘、第三方输入法)也是类似的添加方式。 ‍ 使用原生的理由 虽然之前的文章列了不少第三方的五笔输入法,但其实…

了解DEA算法

在信息安全领域,加密算法是保护数据机密性、完整性和可用性的关键工具。随着技术的不断进步和威胁的不断演变,各种加密算法应运而生,以满足不同场景下的安全需求。其中,DEA算法(尽管“DEA”并非一个广泛认知的加密算法…

Spring Boot与gRPC的整合

一、gRPC的介绍 在gRPC中,客户机应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您更容易创建分布式应用程序和服务。与许多RPC系统一样,gRPC基于定义服务的思想,指定可以远程调用的…

代理IPv6知识分享课堂二

嗨朋友们,欢迎来到今天的代理IPv6知识分享课堂,小蝌蚪上堂课跟大家一起认识了它的概念和工作原理等基础内容,我们算是对它有了一个初步的了解,那今天这节课我们讲的会深入点,我们今天来了解了解它的应用场景和切实地教…