Spring @Bean注解使用场景二

bean:最近在写一篇让Successfactors顾问都能搞明白的sso的逻辑的文章,所以一致在研究IAS的saml2.0的协议,希望用代码去解释SP、idp的一些概念,让顾问了解SSO与saml的关系,在github找代码的时候发现一些代码的调用关系很难理解,今天上课的时候正好需要说到一个知识点,所以希望通过这篇文章去介绍@Bean这个注解的含义。

一 bean的含义

Spring定义Bean的两种方式:<bean>和@Bean,这两种都是去实例化对象的

我们先看XML的bean

然后看@bean注解

通过上面两个图,我们可以看出,这两个是一个意思,只是不同的实现方式而已。

二 分析smal2.0代码

在看github的有一个人写的代码的时候,发现JKSKeyManager keyManager没有实例化就被引用,因为一致以为@bean注解,类就会交给容器管理,如果需要注入就需要用注解@autowire才可以,所以一致没看明白,正好今天上课的时候说注入外部bean的时候,让恍然大户,其实这就是一个典型的通过@Bean注解注入的例子,

复制代码
SamlMessageHandler samlMessageHandler实例化的时候,容器会检查
复制代码
JKSKeyManager keyManage是否被容器接管,如果结果就会自动注入。所以使用JKSKeyManager keyManage的时候不需要@autowire。

三 简单例子验证

现在我们就用UserDao与UserService两个类来演示,首先我们来看UserDao这个类,这类就是一个简单的空架子,我在类上面也没有用注解@Repository。

然后我们在看UserService这个类,这个类也没有加上@Service注解,所以如果没有new,按道理是不会实例化。

现在我配置Config的配置类,这个类上面我有一个注解@Configuration,目的就是用全注解开发,在这个类里面我定义两个bean,注意我们看第二个bean的方法参数里面是UserDao的类,但是我们没有在UserDao类上面使用任何注解,这个时候就会有个疑问,为什么17行不会是空指针。原因很简单,就是在下下图的getbean实例化UserService的时候,系统发现UserDo没有实力,系统就回去找第9行的@Bean代码.就是我们bean注入外部bean的概念。

相关推荐
IT_陈寒2 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰3 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
用户8356290780513 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
小满zs4 小时前
Go语言第二章(小无相功)
后端·go
用户8356290780514 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
karry_k4 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花4 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
贰先生4 小时前
Xiuno BBS X版 用户封禁系统
后端
karry_k4 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
ServBay4 小时前
不会写代码也能建站?AI 时代,非技术创始人如何从零搭建自己的 Web 项目
后端·mcp