Spring使用——通过配置类注入Bean

2023-10-26

配置类

@Configuration //告诉spring这是一个配置类
@ComponentScan

  1. value指定要扫描的包
  2. Filter[] excludeFilters() default {}; 扫描的时候按照规则排除哪些
@ComponentScan(value = "com.ysy",excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class,Service.class}))
  1. includeFilters 扫描的时候按照规则只包含哪些
  2. ASSIGNABLE_TYPE按照指定类型进行扫描
    使用aspectJ表达式
    REGEX:正则表达式
    custom:自定义规则
package com.ysy.config;

import com.ysy.Person;
import com.ysy.service.BookService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;

/**
 * @author shanyangyang
 * @date 2020/5/22
 * 配置类等于以前的配置文件
 */
@Configuration  //告诉spring这是一个配置类
@ComponentScan(value = "com.ysy",includeFilters = @ComponentScan.Filter(
		type = FilterType.CUSTOM,classes = MyTypeFilter.class
//		type=FilterType.ASSIGNABLE_TYPE,classes = BookService.class
//		type = FilterType.ANNOTATION,classes = Controller.class
		),useDefaultFilters = false)
//value指定要扫描的包
//Filter[] excludeFilters() default {}; 扫描的时候按照规则排除哪些
//@ComponentScan(value = "com.ysy",excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class,
//		Service.class}))
//includeFilters 扫描的时候按照规则只包含哪些
//ASSIGNABLE_TYPE按照指定类型进行扫描
//使用aspectJ表达式
//REGEX:正则表达式
//custom:自定义规则
public class MainConfig {
	@Bean("person") //给容器中注册一个bean,为返回值的类型,id默认是方法名
	public Person person01(){
		return new Person("lisi",20);
	}
}

实体Bean

package com.ysy;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;

/**
 * @author shanyangyang
 * @date 2020/5/22
 */
public class Person {
	//使用@value赋值
	//1、基本数值
	//2、可以写SPEL表达式 #{}
	//3、可以写${},取出配置文件中的值(运行的环境变量中的值)
	@Value("ysy")
	private String name;
	@Value("#{10+18}")
	private Integer age;
	@Value("${person.nickName}")
	private String nickName;

	public Person() {
	}

	public Person(String name, Integer age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getNickName() {
		return nickName;
	}

	public void setNickName(String nickName) {
		this.nickName = nickName;
	}

	@Override public String toString() {
		return "Person{" + "name='" + name + '\'' + ", age=" + age + ", nickName='" + nickName + '\'' + '}';
	}
}

测试类

package com.ysy.test;

import com.ysy.Person;
import com.ysy.config.MainConfig;
import com.ysy.config.MainConfig2;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

import java.util.Map;

/**
 * @author shanyangyang
 * @date 2020/5/22
 */
public class IOCTest {
	AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig2.class);

	@Test
	public void testImport(){
		printBeans(context);
	}

	public void printBeans(AnnotationConfigApplicationContext context){
		String[] beanDefinitionNames = context.getBeanDefinitionNames();
		for(String name:beanDefinitionNames){
			System.out.println(name);
		}

		//工厂Bean获取的是调用getObject创建的对象
		Object colorFactoryBean = context.getBean("colorFactoryBean");
		System.out.println("Bean的类型==="+colorFactoryBean.getClass());

		Object colorFactoryBean1 = context.getBean("&colorFactoryBean");
		System.out.println("Bean的类型==="+colorFactoryBean1.getClass());
	}

//	@Test
//	public void test03(){
//		//获取环境变量和操作系统
//		ConfigurableEnvironment environment = context.getEnvironment();
//		//System.out.println(environment.getProperty("os.name"));
//		String[] beanNamesForTypes = context.getBeanNamesForType(Person.class);
//		for (String beanNameType:beanNamesForTypes){
//			System.out.println(beanNameType);
//		}
//
//		Map<String, Person> beansOfType = context.getBeansOfType(Person.class);
//		System.out.println(beansOfType);
//	}

//	@Test
//	public void test01(){
//		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
//
//		String[] definitionNames = context.getBeanDefinitionNames();
//		for(String name:definitionNames){
//			System.out.println(name);
//		}
//	}

//	@Test
//	public void test02(){
//		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig2.class);
//
		String[] definitionNames = context.getBeanDefinitionNames();
		for(String name:definitionNames){
			System.out.println(name);
		}
//		System.out.println("容器初始化完成");
//		Object person = context.getBean("person");
//		Object person1 = context.getBean("person");
//		System.out.println(person == person1);
//	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring使用——通过配置类注入Bean 的相关文章

随机推荐

  • 搭建Vulhub漏洞测试靶场+成功环境

    可点击目录分类快捷浏览 官方地址 环境安装成功后做好快照 环境是否正常运行 检查docker是否运行 没运行则运行 进入对应漏洞文件夹 搭建及运行漏洞环境 官方地址 https vulhub org docs 环境安装成功后做好快照 我个人
  • 怎么可以有颜色的将matlab的代码复制到word中不产生乱码。

    我们直接将matlab中的代码复制粘贴到word中 就会产生如图的乱码 如果选择选择只保留文本 也能解决乱码问题 但是会将matlab原带的代码颜色消失 显得不美观 其实只要改正一下字体就可以解决这种问题 在matlab中设置一下字体就可以
  • Tomcat控制台中文乱码问题

    解决方案 第一 只修改java util logging ConsoleHandler encoding UTF 8下的编码格式 修改成GBK 不成功看第二 我用第一个配置就成功了 第二 在Tomcat根目录下 conf 子目录下的 log
  • Daily Scrum: 2012/11/7

    成员 角色 今天工作 明天计划 王安然 PM Dev 进行Craft类的供给Craft子类的编写 186 继续进行Craft CraftFactory类的编写 186 黄杨 PM Dev Art 完成粒子爆炸效果测试 199 基本样式的星空
  • 前端JavaScript面试技巧

    前端JavaScript面试技巧 第一章 课程简介 1 1课程简介 前端基础 1 2前言 网站前端程序开发分析 1 3几个面试题 typeof操作符 require命令加载ES6模块 SpringLoaded 1 4如何搞定所有面试题 获取
  • 【力扣练习题】加一

    package sim import java math BigDecimal import java util Arrays public class Add1 给定一个由 整数 组成的 非空 数组所表示的非负整数 在该数的基础上加一 最
  • eclipse环境搭建C++环境

    eclipse搭建C 编译环境使用eclipse CDT msys gcc gdb共4个软件 其中几个软件简单理解为 eclipse CDT 用于编辑软件文本 msys 管理使用的软件下载 gcc 用于编译 链接文件 gdb 用于调试 一
  • graphpad7.04多组比较p值_同是折线图为何你却这么优秀,这才是多组数据作图应该有的样子...

    相信大家对Excel做折线图应该不陌生 在展示数据的时候 图表是一种最好的展示方法 但是经常会碰到一种尴尬的事情就是 当数据维多比较多的时候 做出的图表就会显得非常难看 今天我们就来学习一下 多组数据怎么做折线图才好看 平民手中的折线图 当
  • 读书笔记-oo项目生存法则

    1 建立一个成功的项目的简单四步 1 采用增量式进度安排和阶段划分 2 拥有发现和改正错误的机制 3 建立一个良好的产品发布习惯 4 拥有优秀的项目负责人 项目经理和技术主管 2 相关概念 1 类是一组子程序和相关数据的集合 常用类图表示
  • springboot+flowable+mybatisplus初始化建表时如何指定数据源

    springboot flowable mybatisplus初始化表单如何指定数据源 问题描述 解决过程 直接上代码 问题描述 之前在自己的springboot当中集成了flowable 在集成flowable之前 springboot当
  • 直方图均衡化

    https www zhihu com question 37204742 answer 221844779 https zhuanlan zhihu com p 32857009
  • 明文传输漏洞

    业务系统对用户口令等机密信息的保护不足 攻击者可以利用攻击工具 从网络上窃取合法用户的口令数据 从而登录系统执行非法操作 攻击者可以利用监听工具在网络中窃取合法用户的口令数据 从而非法获取系统的访问权限 检测方法 通过burpsuite工具
  • OD-数列还原(python)

    数列还原 题目描述 有一个数列A n 从A 0 开始每一项都是一个数字 数列中A n 1 都是A n 的描述 其中A 0 1 规则如下A 0 1A 1 11 含义其中A 0 1是1个1 即11 表示A 0 从左到右连续出现了1次1A 2 2
  • C语言/C++基础之跨年烟花程序代码(附源码)

    C语言 C 基础之跨年烟花程序代码 程序之美 前言 主体 运行效果 代码实例 结束语 程序之美 前言 元旦将至 新年将至 转眼间2022年即将过去 崭新的一年正向我们缓缓走来 风花雪夜新年临近 入冬寒意随风吹进 繁星点点缀满天际 黎明晨阳元
  • 修改jar包中的class文件

    需求及准备 需求 现在有一个 jar文件 要修改其中某个文件的代码 准备 确保JRE已安装且环境变量已配置 安装Java Decompiler 官方地址为 http java decompiler github io 选择其中的JD GUI
  • Spring循环依赖源码debug详解

    1 什么是循环依赖 在Spring里 指两个或多个bean互相依赖 比如有两个Bean A B A中注入B B中注入A 这样就形成了循环依赖 Spring默认是支持循环依赖的 本文我们就从Spring源码层面对循环依赖进行分析 2 环境构建
  • Node.js学习四(文件流stream)

    文章目录 前言 一 Node处理缓存的方式 二 什么是Node js Stream 流 三 stream 流 的类型 四 创建可读流 五 拷贝文件 六 链式流 1 压缩文件 2 解压文件 前言 在我们学过fs模块后 可以知道读取文件时采用r
  • 12 shell命令之打包

    昨晚写的awk 说实话 对我而言 那是一个最复杂的命令 写得不是很好 可能在结构组织上面有很大的问题 后续有心得会再调整修改 本文将介绍linux的一组打包命令 这其中有我们最常用的tar 也有我们几乎没有见过的mksquansh 接下来就
  • 简明SQL截断和偏移指南:掌握LIMIT实现数据筛选

    以下是用到的表 截断 LIMIT 用于限制查询结果返回的行数 即最多返回多少行数据 例如 返回前两行数据 例如 从第二个数据开始返回两条数据 从0开始计算 偏移 OFFSET 用于指定查询结果的起始位置 即从结果集中的第几行开始返回数据 例
  • Spring使用——通过配置类注入Bean

    配置类 Configuration 告诉spring这是一个配置类 ComponentScan value指定要扫描的包 Filter excludeFilters default 扫描的时候按照规则排除哪些 ComponentScan v