一,问题,Bean找不到

代码

@Component
public class DemoClass { public int doSth() {
return ;
}
}

测试代码

@RunWith(SpringJUnit4ClassRunner.class)
public class DemoClassTest { @Autowired
private DemoClass demoClass; @Test
public void doSth() {
Assert.assertEquals(1, demoClass.doSth());
}
}

虽然DemoClass打了@Component注解,但是在测试代码中@Autowired是找不到到,因为DemoClass是没有被Spring装配到容器中。

Spring把Bean装配到容器主要有以下几种方式

二、通过代码方式

@Configuration注解的方式

新建一个类,增加@Configuration注解

@Configuration
@ComponentScan(basePackages = "com.purespring.demo")
public class DemoConfiguration { }

这里面还有一个@ComponentScan,这个注解告诉Spring要扫描的包,Spring会通过这个配置把这个包下面的组件全部装配到容器中。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = DemoConfiguration.class)
public class DemoClassTest { @Autowired
private DemoClass demoClass; @Test
public void doSth() {
Assert.assertEquals(1, demoClass.doSth());
}
}

测试通过。

@Bean的方式

@Configuration
public class DemoConfiguration {
@Bean
public DemoClass demoClass() {
return new DemoClass();
}
}

上面代码里面已经移除了@ComponentScan的注解,Spring不会做自动扫描,

@Bean会告诉Spring这个方法会返回一个对象,该对象需要被注册成一个Spring Bean

三、通过XML配置

增加xml配置,命名为demoConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.purespring.demo"></context:component-scan>
</beans>

在测试代码中引入配置

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/demoConfig.xml")
public class DemoClassTest { @Autowired
private DemoClass demoClass; @Test
public void doSth() {
Assert.assertEquals(1, demoClass.doSth());
}
}

测试通过。

Spring(004)-Bean装配的更多相关文章

  1. 【Spring】Spring的bean装配

    前言 bean是Spring最基础最核心的部分,Spring简化代码主要是依赖于bean,下面学习Spring中如何装配bean. 装配bean Spring在装配bean时非常灵活,其提供了三种方式 ...

  2. Spring对Bean装配详解

    1.Spring提供了三种装配bean的方式: 2.自动装配bean: 3.通过Java代码装配bean 4.通过XML装配bean 前言:创建对象的协作关系称为装配,也就是DI(依赖注入)的本质.而 ...

  3. spring 使用@Bean装配Bean

    通过@Component装配Bean,但是@Component只能注解在类上,不能注解到方法上.对于Java而言,大部分的开发都需要引入第三方的包(jar文件),而且往往并没有这些包的源码,这时候将无 ...

  4. Spring boot Bean装配

    . Spring boot bean 默认创建的bean 为singleton模式 . @Component 注解 . @Value 为属性初始化 . @Value("${}") ...

  5. Spring随笔-bean装配-自动装配

    Spring提供了三种装配方式 1.XML文件进行显式装配 2.java中进行显示装配 3.自动化装配 1.自动化装配的两种实现方式 1.组件扫描:Spring会自动发现应用上下文中创建的bean 2 ...

  6. Spring随笔-bean装配

    Spring提供了三种装配方式 1.XML文件进行显式装配 2.java中进行显示装配 3.自动化装配 1.自动化装配的两种实现方式 1.组件扫描:Spring会自动发现应用上下文中创建的bean 2 ...

  7. spring Bean装配的几种方式简单介绍

    Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系.作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起. spring中bean装配有两种方式 ...

  8. Spring学习笔记—装配Bean

    在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...

  9. spring实战一:装配bean之注入Bean属性

    内容参考自spring in action一书. 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质. 1. 创建spring配置 spring是一个基于容器的框架.如果没有配置spri ...

随机推荐

  1. 201871010111-刘佳华《面向对象程序设计(java)》第八周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第八周学习总结 实验七 接口的定义与使用 实验时间 2019-10-18 第一部分:知识总结 接口的概念: ①java为了克 ...

  2. [C4W2] Convolutional Neural Networks - Deep convolutional models: case studies

    第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) 为什么要进行实例探究?(Why look at case studies?) 这周我们 ...

  3. luoguP3242 [HNOI2015]接水果

    题意 考虑整体二分. 考虑路径\((x,y)\)被路径\((u,v)\)包含需要满足什么条件: 设\(dfn_x\)表示\(x\)的\(dfs\)序,\(low_x=dfn_x+size_x-1\), ...

  4. windows下 go vscode编译运行方法

    1:直接在终端运行go run命令编译 2.安装code runner插件,根据箭头标示顺序,可以在右侧看到它支持的语言.

  5. ST表基础模板

    ST表是用来求RMQ问题(求区间最大或最小值问题)的实用数据结构,支持\(O(nlog_n)\)建立,\(O(1)\)查询,是比较高效的结构 其原理实质上是DP(我最讨厌的东西) 题面:屠龙宝刀... ...

  6. [LOJ 6213]「美团 CodeM 决赛」radar

    [LOJ 6213]「美团 CodeM 决赛」radar 题意 给定 \(n\) 个横坐标 \(x_i\) , 为它们选择一个不超过 \(y_i\) 的纵坐标 \(h_i\), 产生 \(c_ih_i ...

  7. 优雅的解决springboot Aop @Cacheable this不生效

    问题描述:在同一个类中springAop不生效,例如在同一个类中没有 @Cacheable的方法调用本类有 @Cacheable的方法,则缓存不会设置. 原因:springaop基于java prox ...

  8. PDF文件添加二维码水印教程

    maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/i ...

  9. Nginx Cache-Control

    转自:https://www.cnblogs.com/sfnz/p/5383647.html HTTP协议的Cache-Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置 Cach ...

  10. Win10+Anaconda+tensorflow-cpu安装教程

    基础概念 Python2.x or Python3.x 自从20世纪90年代初Python语言诞生至今,一直在迭代更新,根据出现的时期,可以分为Python2.x和Python3.x两个大版本.其中P ...