`
hetaoo
  • 浏览: 107664 次
社区版块
存档分类
最新评论

spring学习一:自动装配bean

阅读更多

Spring从两个角度实现自动化装配:

1、组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean

2、自动装配(autowiring):Spring自动满足bean之间的依赖

 

组件扫面和自动装配组合在一起能发挥强大的威力。

 

准备几个bean:

 

   CompactDisc接口:

 

package spring.component;

/**
 * @ClassName CompactDisc
 * @Date 2016年12月27日 下午3:26:21
 */
public interface CompactDisc {
	 void paly();
}

 

SgtPepers实现类:

 

 

 

package spring.component.impl;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import spring.component.CompactDisc;

/**
 * @ClassName SgtPepers
 * @Date 2016年12月27日 下午3:30:04
 */

@Component
public class SgtPepers implements CompactDisc{
	private String title = "Sgt. Pepper's Lonely Hearts Club Band"; 
	private String artist = "The Beatles";
	
	public void paly() {
		System.out.println("palying " + title + " by " + artist);
		
	}

}

 

Spring组件扫描默认是不启用的。

 

所以显示配置一下Spring,从而命令它去寻找带有@Component注解类,并为其创建bean(有两种方法:1、xml配置;2、java配置【本人优先选这种】)

package spring.component.javaConfig;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import spring.component.CompactDisc;
import spring.component.impl.CDPlayer;
import spring.component.impl.SgtPepers;

/**
 * @ClassName ComponentScan
 * @Date 2016年12月27日 下午3:37:38
 */

  @Configuration
  @ComponentScan("spring.component")
  public class CDplayerConfig{
	
  }
}

 

如果扫描多个包使用@ComponentScan(basePackages={"spring.component","..."}) or @ComponentScan(basePackageClasses={....class ,....class})

 

Junit测试:

package spring.component;

import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import spring.component.javaConfig.CDplayerConfig;

/**
 * @ClassName ComponentTest
 * @Date 2016年12月27日 下午4:03:28
 */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDplayerConfig.class)
public class CDPlayerTest {
	
	@Autowired
	private CompactDisc cd;
	
	
	private CompactDisc cd2;
	
	@Test
	public void cdNotNull(){
		assertNotNull(cd);
	}
	
}

 

其中:@Named(java依赖注入规范)可以作为@Component注解的替代方案(有差异)

 

@Autowired 自动装配 

   

   不仅可以使用在构造器上

       @Autowired
	public CDPlayer(CompactDisc cd){
		this.cd = cd;
	}

 

还能用在属性的Setter方法上

       @Autowired
	public void setCd(CompactDisc cd) {
		this.cd = cd;
	}

 

实际Setter方法并没有特殊之处,@Autowired可以用在类的任何方法上

       @Autowired
	public void insertDisc(){
		cd.paly();
	}

 

 

 @Autowired 的required属性设置为false,spring会尝试执行自动装配,但是如果没有匹配的bean,spring将会让这个bean处于未装配的状态(可能会出现NullPointerExcepiton)

 

 

其中:@Inject(java依赖注入规范)可以作为@Autowired注解的替代方案(有差异)

 

分享到:
评论

相关推荐

    Spring Boot技术知识点:Bean装配1

    在Spring Boot框架中,Bean装配是核心...在component-demo这个示例中,可能会包含一个或多个演示如何装配Bean的代码片段,例如自定义配置类、Bean注入等。通过学习和实践,我们可以加深对Spring Boot Bean装配的理解。

    Spring实现自动装配

    在学习自动装配的过程中,建议先从简单的基于类型的自动装配开始,然后逐步掌握基于注解的自动装配。理解每个bean如何被创建、初始化和装配,以及Spring如何处理这些过程,对于深入理解Spring框架至关重要。 本项目...

    spring自动装配例子

    ean的自动装配,有4种 (1)no:不做任何操作 (2)byName:根据属性 名 自动装配,设值注入 <bean id="xxx" class="xxx" ></bean> (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 <bean...

    Spring中的自动装配有哪些限制?.docx

    在Spring框架中,自动装配(Auto-Wiring)是一种便捷的方式来管理bean之间的依赖关系,它能够自动将所需的bean注入到目标bean中,而无需显式配置。然而,自动装配并非适用于所有场景,它存在一些限制。以下是一些...

    Spring自动装配解析

    在Spring的XML配置文件中,可以通过`<beans>`标签的`autowire`属性来全局设置自动装配策略,或者在单个`<bean>`标签中通过`autowire`属性指定某一个bean的自动装配方式。 4. 使用注解进行自动装配 Spring 2.5引入了...

    spring学习之四“自动装配”

    在Spring框架中,“自动装配”(Autowiring)是一项核心特性,它允许Spring容器自动为bean注入所需的依赖,而无需显式配置。本篇将深入探讨自动装配的概念、类型以及如何在Spring应用中使用。 自动装配是Spring IoC...

    Spring源码学习二:BeanDefinition解析1

    在Spring框架中,BeanDefinition是核心组件之一,它定义了bean的基本信息和元数据,包括bean的类、作用域、依赖关系、初始化方法等。在Spring容器启动时,配置文件或注解中的bean定义会被解析成BeanDefinition对象,...

    Spring自动装配Bean实现过程详解

    Spring自动装配Bean实现过程详解 Spring框架提供了自动装配Bean的功能,该功能可以根据Bean的属性名称或类型自动将Bean装配到其他Bean中,从而简化了Bean的配置工作。在本文中,我们将详细介绍Spring自动装配Bean...

    spring入门学习-3、Bean装配(XML).pdf

    6. **Autowiring-mode**:定义了如何自动装配Bean。Spring支持按类型、按名称等多种自动装配模式。 7. **Lazy-initialization-mode**:懒加载模式,表示Bean是否在容器启动时立即创建,还是在首次请求时创建。 8. ...

    spring自动生成bean项目

    为了简化这一过程,Spring提供了一种自动创建Bean的机制,这就是所谓的"代码生成"或者"Bean自动生成"。本项目"spring自动生成bean项目"旨在通过自动化的方式,帮助开发者根据数据库表结构快速生成对应的Java Bean...

    day38 16-Spring的Bean的装配:注解的方式

    以上就是Spring使用注解方式装配Bean的基本过程和关键注解的介绍。通过这种方式,我们可以轻松地管理Bean的生命周期,实现依赖注入,以及对Bean的其他配置,极大地提高了代码的可维护性和灵活性。在实际项目中,结合...

    Spring源码学习七:web应用自动装配Spring配置文件1

    本文主要围绕"Spring源码学习七:web应用自动装配Spring配置文件1"这一主题,详细解析Web环境中Spring的初始化过程。 首先,我们注意到在传统的Java应用程序中,通常使用`ClassPathXmlApplicationContext`手动创建...

    spring在IoC容器中装配Bean详解

    自动装配是 Spring 框架中的一个功能,它可以自动地将依赖对象注入到 Bean 中。使用 `<bean>` 元素的 `autowire` 属性可以指定自动装配的类型。 五、方法注入 方法注入是依赖注入的一种方式,它要求 Bean 的方法...

    spring自动扫描和管理Bean的示例

    - **@Autowired**:用于自动装配Bean的依赖。Spring会尝试根据类型或名称找到合适的Bean进行注入。 - **@Qualifier**:配合@Autowired使用,当有多个相同类型的Bean时,可以指定要注入的具体Bean。 - **@Scope**:...

    spring入门教程之bean的继承与自动装配详解

    这里的`autowire="byName"`指示Spring尝试找到一个名为`name`的Bean来自动装配到`Person`类的相应属性上。 Bean的继承是通过`parent`属性实现的,允许一个Bean继承另一个Bean的配置。这样可以重用和覆盖父Bean的...

    spring装配bean实例代码

    本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和注解配置。在本例中,我们将重点关注XML配置,对应的压缩包文件名为“springxmldemo”,...

    spring自动装配

    - `autodetect`模式:尝试通过`byType`和`byName`来自动检测并装配Bean。 - `default`模式:如果没有指定其他方式,将使用默认的装配策略。 描述中提到的博文链接指向了一个ITeye上的博客文章,可能详细解释了...

    在Spring中自动装配Bean的属性

    在 Spring 框架中,自动装配 Bean 的属性是非常重要的一部分,今天我们将为大家分享关于在 Spring 中自动装配 Bean 的属性的知识。 首先,Spring 的最基本的能力就是 DI,即依赖注入,或控制反转,它可以为 Bean ...

    Spring 自动装配及其注解

    1. **@Autowired**:这是最常用的注解,用于自动装配bean。Spring会尝试找到类型匹配的bean进行注入。如果存在多个候选bean,则可以通过`@Qualifier`进一步指定。 2. **@Qualifier**:与`@Autowired`配合使用,用于...

    springboot源码解析(二):自动装配原理1

    在Spring Boot的应用程序启动流程中,自动装配是一个关键特性,它使得开发者无需手动配置bean,而是由Spring Boot自动识别和管理。本节我们将深入探讨自动装配的原理。 首先,Spring Boot的启动是从`run`方法开始的...

Global site tag (gtag.js) - Google Analytics