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的概念。

相关推荐
S***26751 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)2 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL2 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
V***u4532 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿2 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9193 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08293 小时前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡3 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
@大迁世界3 小时前
相信我兄弟:Cloudflare Rust 的 .unwrap() 方法在 330 多个数据中心引发了恐慌
开发语言·后端·rust
vx_dmxq2113 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php