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. STL-set&&multiset 集合

    #include <iostream> #include <cstdio> #include <set> // 仿函数的原型 //struct greaters / ...

  2. 关于牛客网C语言结构体位域(bit-fields)的一道题

    题目链接地址: https://www.nowcoder.com/questionTerminal/f4e20747a2dd4649bac0c028daa234f4 来源:牛客网 低地址字节 Byte ...

  3. 洛谷【P1595 信封问题】 题解

    题目链接 https://www.luogu.org/problem/P1595 题目描述 某人写了n封信和n个信封,如果所有的信都装错了信封.求所有信都装错信封共有多少种不同情况. 输入格式 一个信 ...

  4. TCP 与 UDP 浅谈

    TCP与UDP区别总结:1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重 ...

  5. java语言额堂测试

    package java88; public class ScoreInformation { public ScoreInformation() {}; private String stunumb ...

  6. springboot~gradle4.7之后的lombok引用方法

    在gradle4.7以后对于加入依赖lombok方式发生变化,gradle4.7版本以前,可以直接如下引用: compile("org.projectlombok:lombok:1.18.2 ...

  7. python数据分析学习(2)pandas二维工具DataFrame讲解

    目录 二:pandas数据结构介绍   下面继续讲解pandas的第二个工具DataFrame. 二:pandas数据结构介绍 2.DataFarme   DataFarme表示的是矩阵的数据表,包含 ...

  8. pycharm+anaconda在Mac上的配置方法 2019.11.29

    内心os: 听人说,写blog是加分项,那他就不是浪费时间的事儿了呗 毕竟自己菜还是留下来东西来自己欣赏吧 Mac小电脑上进行python数据开发环境的配置 首先下载Anaconda,一个超好用的数据 ...

  9. element-ui的upload组件的clearFiles方法

    <template> <div> <el-button @click="clearFiles">重新上传</el-button> & ...

  10. [P4450] 双亲数 - 莫比乌斯反演,整除分块

    模板题-- \[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=k] = \sum\limits_{i=1}^a\sum\limits_{j=1}^b[k|i ...