SpringBoot —— Bean的注入方式

文章目录

  • 1、组件注解
  • 2、@Component + @Bean
  • 3、@Import(PlaceHolderClass)快速导入一个组件
  • 4、使用Spring提供的FactoryBean注入

1、组件注解

注解描述
@Component组件定义不清晰时候的注解
@Controller控制器层
@Service服务层
@Repository数据层

注:添加注解的类需要与启动类在同一个包路径下,如果在别的包下,需要在 启动类启动类所在包下的存在以上注解的类 中添加 @ComponentScan 注解。

例如:

启动类:

package com.springboottest;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication
@ComponentScan(basePackages = {"com.springtest", "com.springboottest"})
public class SpringbootTestApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTestApplication.class, args);}}

Student类(与启动类不在同一个包路径下):

package com.springtest;import lombok.Data;
import org.springframework.stereotype.Component;import java.lang.reflect.Field;@Data
@Component
public class Student {private String name;private String nickName;
}

2、@Component + @Bean

@Component
public class Test {@Beanpublic User user() {return new User();}
}

注:@Bean注解的方法,返回值 User 作为注入的 Bean 对象。


3、@Import(PlaceHolderClass)快速导入一个组件

PlaceHolderClass描述
一般Class直接注入
实现了ImportSelector接口的Class根据返回类的全限定名数组注入
实现了ImportBeanDefinitionRegistrar接口的Class获取类描述信息,选择性手动注入
@Configuration
@Import({ImportDemo.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
public class ImportConfig{@Beanpublic User user(){return new User();}
}
//自定义逻辑返回需要导入的组件
public class MyImportSelector implements ImportSelector {//返回值是导入到容器中的组件全限定名数组@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//当前类的所有注解Set<String> annotationTypes = importingClassMetadata.getAnnotationTypes();System.out.println("当前配置类的注解信息:"+annotationTypes);return new String[]{"com.paopaoedu.springboot.bean.user01","com.paopaoedu.springboot.bean.user02"};}
}
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {/*** AnnotationMetadata:当前类的注解信息* BeanDefinitionRegistry:BeanDefinition注册类;*      把所有需要添加到容器中的bean;调用*      BeanDefinitionRegistry.registerBeanDefinition手工注册进来*/@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {boolean definition = registry.containsBeanDefinition("com.paopaoedu.springboot.bean.User01");boolean definition2 = registry.containsBeanDefinition("com.paopaoedu.springboot.bean.User02");if(definition && definition2){//创建一个类的BeanDefinition(Bean的描述信息对象)RootBeanDefinition beanDefinition = new RootBeanDefinition(User03.class);//注册一个Bean,指定bean名registry.registerBeanDefinition("User03", beanDefinition);}}
}

4、使用Spring提供的FactoryBean注入

public class UserFactoryBean implements FactoryBean<User> {// 注入的Bean@Overridepublic User getObject() throws Exception {return new User();}// 注入的Bean类型@Overridepublic Class<?> getObjectType() {return User.class;}// 是否是单例@Overridepublic boolean isSingleton() {return true;}
}

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

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

相关文章

如何保养电池

1&#xff0c;不要在低于0度和高于35度的范围下使用电池&#xff0c;尤其是高温环境下对电脑充电&#xff0c;对电池的破坏是不可逆转的。2&#xff0c;放电过于彻底或者充电过于饱和&#xff0c;也会对电池的容量造成损耗。BMS 调整电池的充放电3&#xff0c;电脑长期不用&…

codeforces 116A-C语言解题报告

116A题目网址 题目解析 1.输入n(n个循环),每一个循环-a,b;第一个循环只有b;最后一个循环只有-a;求其中在车上的最大人数? 举例: 输入: 4 0 3 2 5 4 2 4 0 输出: 6 2.注意点:因为使用count计数时,count一直在改变,所以再加入一个max变量去记录count中出现的最大数. 代码 #…

SpringBoot —— @ComponentScan注解

文章目录一、作用二、注解属性说明三、使用方式一、作用 主要是从定义的扫描路径中&#xff0c;找出标识了需要装配的类自动装配到Spring的bean容器中。 简单的说就是 ComponentScan告诉Spring从哪里找到bean&#xff0c;一旦指定了&#xff0c;Spring就会将指定的包及其下级…

硬盘 相关知识

磁盘存储数据于轨道上&#xff0c;为了防止数据不被干扰&#xff0c;轨道之间是存在间隙的。如果间隙越小存储的数据越多&#xff0c;但是对数据的写入和读取所使用的磁头是不一样的&#xff0c;写入的磁头比较宽&#xff0c;读取的磁头比较窄。叠瓦式硬盘&#xff0c;将轨道和…

Java 序列化反序列化框架比较

文章目录一、简介二、序列化框架1、JDK2、XML序列化3、JSON序列化4、Hessian5、Avro序列化6、Kyro序列化7、Protostuff三、序列化框架对比测试1、对象准备2、JDK方式3、FastJson方式4、Hessian方式5、Protostuff方式6、测试代码四、总结五、序列化应用场景六、注意事项一、简介…

C++primer 第 2 章 变量和基本类型

2.1 基本内置类型 算术类型&#xff08;arithmetictype&#xff09;和空类型&#xff08;void&#xff09;在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值&#xff0c;仅用于一些特殊的场合&#xff0c;例如最常见的是&#xff0…

codeforces 58A-C语言解题报告

58A题目网址 题目解析 1.输入字符串,问如果删去其中的一些自发,能否得到hello,如果能就输出YES,否则输出NO 举例: 输入: ahhellllloou 输出: YES 2.注意点: 因为C语言没有java中的匹配字符串,则新建立一个 word[6]“hello”; 在循环中使用word去与s匹配,当匹配到了就 count…

ClickHouse 客户端命令

文章目录一、简介二、常用命令1、连接命令2、SQL语法&#xff08;1&#xff09;查看数据库列表&#xff08;2&#xff09;查看当前使用的数据库&#xff08;3&#xff09;查看数据库中表列表&#xff08;4&#xff09;创建数据库&#xff08;5&#xff09;创建表&#xff08;6&…

2000年考研英语阅读理解文章三

文章详细解析 注意点 1.当作者在文章中写到:实际问题是:我们从根本上改变了吗? 说明:我们没有发生根本上的改变,作者不同意前文中的未来派诗歌 知识点 ----单词 unhampered adj无阻碍的 finite adj有限的 ink n墨水 corresponding adj相应的,符合的 upsetting adj令人生厌…

SpringBoot 集成Mybatis

文章目录一、创建SpringBoot项目二、添加Mybatis相关依赖三、数据源配置四、创建事务的模型实体类五、创建和数据库交互联系的映射关系类六、创建业务接口和实现类七、创建控制器类八、请求验证一、创建SpringBoot项目 如何创建详见&#xff1a;IDEA 创建 SpringBoot 项目 二、…

C++primer 第 3 章 字符串、向量和数组 3.1 命名空间的using声明 3.2标准库类型string

引言 除了第2章介绍的内置类型之外,C语言还定义了 -个内容丰富的抽象数据类型库。其中,string和 vector是两种最重耍的标准库类型&#xff0c;前者支持可变长字符串&#xff0c;后者则 表示可变长的集合。还有…种标准库类型是迭代器&#xff0c;它是string和vector的配套类型…

ClickHouse 四舍五入函数

文章目录一、round(x[,N])二、floor(x[,N])三、ceil(x[,N]),ceiling(x[,N])四、trunc(x[, N]), truncate(x[, N])一、round(x[,N]) 说明&#xff1a;将值取整到指定的小数位数&#xff0c;该函数按顺序返回最近的数字。 语法&#xff1a; round(expression [, decimal_place…

codeforces 59A-C语言解题报告

59A题目网址 题目解析 1.输入字符串,如果大写字母最多,则全部输出为大写;如果小写字母多或大小写字母一样多,则全部输出为小写 举例: 输入: maTRIx 输出: matrix 2.使用a,b两个变量去记录大小写字母的数量 代码 #include<stdio.h> #include<stdlib.h> #includ…

C++primer 第 3 章 字符串、向量和数组 3 . 3 标准库类型vector

标准库类型vector表示对象的集合&#xff0c;其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引&#xff0c;索引用于访问对象。因为vector"容纳着”其他对象&#xff0c;所以它也常被称作容器(container).第 II部将对容器进行更为详细的介绍。 要想使用…

SpringBoot AOP切面实现

文章目录一、AOP简介二、AOP体系与概念三、AOP实例1、创建SpringBoot工程2、添加依赖3、AOP相关注解3.1、Aspect3.2、Pointcut3.2.1、execution()3.2.2、annotation()3.3、Around3.4、Before3.5、After3.6、AfterReturning3.7、AfterThrowing一、AOP简介 AOP&#xff08;Aspec…

英语口语-文章朗读Week8 Friday

文章 It is a phenomenon that people are losing trust in each other in today’s society. Some people become selfish,and for interest, they are likely to betray their colleagues,friends, and even their relatives. They tend to cater to those who can benefit …

C++primer 第 3 章 字符串、向量和数组 3 . 4 迭代器介绍

3.4迭代器介绍 我们已经知道可以使用下标运算符来访问string对象的字符或vector对象的元素&#xff0c;还有另外一种更通用的机制也可以实现同样的目的&#xff0c;这就是迭代器&#xff08;iterator&#xff09;。在第II部分中将要介绍&#xff0c;除了vector之外&#xff0c…

ClickHouse 函数

文章目录一、日期函数1、时间或日期截取函数&#xff08;返回非日期&#xff09;2、时间或日期截取函数&#xff08;返回日期&#xff09;3、日期或时间日期生成函数二、类型转化类函数1、精度保留&#xff08;非四舍五入&#xff09;2、字符串转化为整数&#xff08;非整数的字…

英语口语-文章朗读Week9 TuesDay

朗读文章 People living in ancient times had no alternative but to do housework manually. They fire the wood when they cook,they hand wash clothes with hands; they sweep the floor with brooms. Now, modern inventions come as a great relief to people. We co…

SpringBoot @Value注解

目录一、非配置文件注入1、注入普通字符串2、注入JAVA系统变量3、注入表达式4、注入其他Bean属性5、注入文件资源6、注入URL资源二、通过配置文件注入1、注入普通字符串2、注入基本类型3、注入数组类型4、注入List类型5、注入Map类型一、非配置文件注入 1、注入普通字符串 直…