1.组建扫描

在类上添加注解@Component注解可以实现组建扫描

@Component
public class A{
...
}

2.自动装配

通过在属性上或者方法上添加@Autowired注解可以实现自动装配(在单例bean,没有歧义的情况下)

public class B{
@Autowired
private A a;
... } public class B{
   @Autowired
   public B(A a){
...
}
... }

3.通过java代码实现显示装配

当使用第三方库时,无法实现自动装配,所以需要显示装配bean。在配置类中添加@Configuration注解,在方法上添加@Bean注解实现创建bean。

装配方式一:
@Configuration
public classs C{
@Bean
public A getA(){
return new A();
} @Bean
public B setA(){
return new B(getA());
}
} 装配方式二:
@Configuration
public classs C{
@Bean
public A getA(){
return new A();
} @Bean
public B setA(A a){
return new B(a);
}
}

4、自动装配与歧义性

spring的默认模式是单例模式,只有单例模式时,才可以实现自动装配。为了处理歧义性,有以下几种方式:

假设有以下多个bean

@Compant
public class Icecream extend Dessert{...}
@Compant
public class Cookie extend Dessert{...}
@Compant
public class Cake extend Dessert{...}

(1)标识首选Bean

利用@Primary注解

@Component
@Primary
public class Icecream extends Dessert{...}

(2)使用限定符表示不同的bean

@Autowired
@Qualifier("icecream")//这里使用Icecream类,它的bean的名字默认为类的名字首字母小写,即“icecream”
private Dessert dessert;

如果要使用自定义的bean的限定符:

定义:
@Component
@Qualifier("cold")
public class Icecream extends Dessert{...} 使用:
@Autowired
@Qualifier("cold")
private Dessert dessert;

5、bean的作用域

包含四种模式:

(1)单例模式:整个应用程序,只建立一个实例bean

(2)原型模式:每次注入或者通过spring上下文获取的时候,就建立一个实例bean

(3)会话模式:每个会话建立一个实例bean

(4)请求模式:每次请求建立一个实例bean

spring默认情况下,是单例模式,如果要用其他模式,可以用@Scope注解,并且配合@Component和@Bean使用。

@Component
@Scope("prototype")
public class A{
...
} @Bean
@Scope("prototype")
public A getA(){
...
}

spring自动装配和通过java实现装配的更多相关文章

  1. Spring学习系列(三) 通过Java代码装配Bean

    上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean 二.通过Java类装配bean 在前面定义了HelloWorldConfig类,并使用@Compon ...

  2. 第2章—装配Bean—通过java代码装配bean

    通过java代码装配bean ​ 在进行显式装配的时候,有两种选型方案:java和XML配置,这里先介绍java的配置方式. 2.3.1创建配置类 先复习下上一章的配置内容: @Configurati ...

  3. Spring装配Bean之Java代码装配bean

    尽管通过组件扫描和自动装配实现Spring的自动化配置很方便也推荐,但是有时候自动配置的方式实现不了,就需要明确显示的配置Spring.比如说,想要将第三方库中的组件装配到自己的应用中,这样的情况下, ...

  4. Spring 自动装配 Bean

    Spring3系列8- Spring 自动装配 Bean 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiri ...

  5. Spring 自动装配及自动注册的相关配置

    Spring支持好几种自动装配(Autowiring)的方式,以及自动扫描并注册Bean的配置(在beans.xml中配置). 下文我们进行一个小结. 1. <context: annotati ...

  6. Spring 通过Java代码装配bean

    1. 背景 书接上文Spring自动化装配bean 尽管在很多场景下通过组件扫描和自动装配实现Spring的自动化扫描配置是更为推荐的方式,但在有些情况下自动化扫描的方案行不通,如想要将第三方库中的组 ...

  7. Spring自动装配Bean详解

    1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiring ‘byType 4.      Auto-Wirin ...

  8. Spring 之通过 Java 代码装配 bean

    [关于IoC的几点认识] 1.面向接口编程 --> 每层只向上层提供接口 2.inversion of control (IoC)  -->参考百度百科 3.DI是IoC的一种实现方式 [ ...

  9. Spring 自动注册及自动装配

    Spring支持三种注册Bean及装配Bean的方式: 显式地在Java代码中注册及装配 显示地在Xml文件中注册及装配 隐式地装配,即自动注册及装配 这三种方式可以混合使用.选择哪种更多地是看个人品 ...

随机推荐

  1. 复习babel

    对babel进行复习

  2. yii2 response响应配置

    response参数配置 方式一.全局配置 用于接口开发 适用:只有所有请求都是application/json类型时可用. $config = [ 'components' => [ 'res ...

  3. Codeforces Round #578 (Div. 2) 二维差分 可做模板

    题意: 在n*n的矩阵中,你可以选择一个k*k的子矩阵,然后将这个子矩阵中的所有B全部变为W,问你怎么选择这个子矩阵使得最终的矩阵中某一行全是W或者某一列全是W的个数最多 题解:考虑每一行和每一列,对 ...

  4. ubuntu set up 7 - power

    https://askubuntu.com/questions/1078939/ubuntu-18-04-battery-life http://tipsonubuntu.com/2018/11/18 ...

  5. pip淘宝镜像安装

    pip install virtualenvwrapper-win pip install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv ...

  6. [POI2005] SKA-Piggy Banks - DFS

    有N个小猪存钱罐.每一个存钱罐能够用相应的钥匙打开或者被砸开.Byteazar已经将钥匙放入到一些存钱罐中.现在已知每个钥匙所在的存钱罐,Byteazar想要买一辆小汽车,而且需要打开所有的存钱罐.然 ...

  7. python3-cookbook笔记:第一章 数据结构和算法

    python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...

  8. tomcat-embeded-core源码编译

    使用spring-boot创建web工程时,默认采用embeded tomcat作为容器,实际使用过程中,可能会需要对其中的某些功能做微调,而tomcat又没有给出预留配 ,这时就需要对tomcat- ...

  9. Spark学习之路 (三)Spark之RDD[转]

    RDD的概述 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的 ...

  10. 环境配置 | 安装Jupyter Notebook及jupyter_contrib_nbextensions库实现代码自动补全

    一.Jupyter Notebook的安装与启动 安装Jupyter Notebook pip3 install jupyter 启动 jupyter notebook 输入命令后会自动弹出浏览器窗口 ...