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

相关推荐
秋野酱9 分钟前
基于javaweb的SpringBoot足球俱乐部管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
qq_5895681013 分钟前
java学习笔记2
java·笔记·学习
翱翔-蓝天22 分钟前
Spring Boot使用线程池创建多线程
java·spring boot·后端
旧厂街小江23 分钟前
LeetCode第76题:最小覆盖子串
后端·算法·程序员
喵叔哟24 分钟前
11.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--整合日志
java·微服务·.net
uhakadotcom24 分钟前
ClickHouse与PostgreSQL:数据库的选择与应用场景
后端·面试·github
杨凯凡29 分钟前
深入理解Spring Boot:快速构建现代化的Java应用
java·spring boot·spring
闯闯的日常分享31 分钟前
浅析HTTP与HTTPS的区别
后端
四七伵31 分钟前
MySQL主键生成的4种方式:优缺点及性能对比!
后端·mysql
杨凯凡33 分钟前
深入理解Spring MVC:构建灵活的Web应用
java·spring boot·spring