文档章节

Spring Bean 的装配方式

TSMYK
 TSMYK
发布于 2017/05/21 21:09
字数 1008
阅读 49
收藏 0

Spring in Action4的读书笔记之-Bean 的装配方式

##Spring in Action4-Bean 的装配方式

  1. 自动配置 Bean
  2. Java 配置 Bean
  3. XML 方式配置 Bean

###1. 自动配置 Bean

@Component
//这个简单的注解表明该类会作为组件类,并告知Spring要为这个类创建bean
public class SgtPeppers implements CompactDisc {

private String title = "see you again";

private String artist = "Daive";

public void display() {
    System.out.println("title: " + title + ", artist: " + artist);
}

}

#####@Component 表名它是一个受 Spring管理的 Bean,除此之外 ,还有以下的方式来自动配置 bean

@Service:表示它是一个 server层的组件

#####@Repository:表示它是一个持久层 Dao的组件

@Controller:表示它是一个控制层的组件

之后就可以在其他的类中使用该 bean了。

public class CDPlayerConfigTest {
    @Autowired//自动装配 bean
    private CompactDisc cd;
   [@Test](https://my.oschina.net/azibug)
    public void cdShouldNotBeNull(){
        Assert.assertNotNull(cd);
    }
}

<br><br>

####例: @Autowired注解不仅能够用在属性上, 还能用在构造器和属性的Setter方法上。其实也可以用在其他方法上,Spring都会尝试满足方法参数上所声明的依赖

如果没有匹配的bean, 那么在应用上下文创建的时候, Spring会抛出一个异常。为了避免异常的出现, 你可以将 @Autowiredrequired属性设置为false , 但是, 需要谨慎对待。 如果在你的代码中没有进行null检查的话, 这个处于未装配状态的属性有可能会出现NullPointerException

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

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

###2. Java配置 Bean(主要)

####@Bean

要在Java中声明bean, 我们需要编写一个方法, 这个方法会创建所需类型的实例,然后给这个方法添加@Bean注解

@Bean注解会告诉Spring这个方法将会返回一个对象, 该对象要注册为Spring应用上下文中的bean。 方法体中包含了最终产生bean实例的逻辑。

默认情况下,beanID与带有@Bean注解的方法名是一样的。 如果你想为其设置成一个不同的名字的话,那么可以重命名该方法,也可以通过name属性指定一个不同的名字.

 @Bean(name = "sgtPerpers")
 public CompactDisc sgtPerpers(){
     return new SgtPeppers();
 }

###eg:

定义一个 bean:

public class SgtPeppers implements CompactDisc {

    private String title = "see you again";

    private String artist = "Daive";

    @Override
    public void display() {
        System.out.println("title: " + title + ", artist: " + artist);
    }
}

<br> 定义一个`Java`类的配置文件:

@Configuration
public class CDPlayerConfig {
    
    @Bean(name = "sgtPerpers")
    public CompactDisc sgtPerpers(){
        return new SgtPeppers();
    }
}

测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class TestJavaConfig {

    @Autowired
    private CompactDisc sgtPerpers;

    @Test
    public void testSgtPerpers(){
        Assert.assertNotNull(sgtPerpers);
    }
}

<br> ####一些注解的作用:

####@Configuration

表明这个类是一个配置类, 该类应该包含在Spring应用上下文中如何创建bean的细节

####@ComponentScan 扫描组件,当前类所在包及其子包下的注解类,即标注了 @Component, @Service, @Repository, @Controller注解的类

该注解相当于在XML配置文件中配置

<context:component-scan base-package=""/>

@ComponentScan默认配置的是该类所在的包及其子包

  1. 想要配置其他的包,可以使用 basePackages = {}属性,所设置的基础包是以String类型表示的。但这种方法是类型不安全(not type-safe)的。 如果重构代码的话,那么所指定的基础包可能就会出现错误了。
  2. 可以将包指定为包中所包含的类或接口,这时可以使用basePackageClasses = {}属性

####@RunWith(SpringJUnit4ClassRunner.class) 自动创建Spring的应用上下文

####@ContextConfiguration(classes={}) 告诉spring需要在哪里加载配置

####注 如果一个应用的配置文件太大的话,可以拆分成多个配置文件,然后创建一个总的配置文件来引用其他的配置文件。配置文件可以通过 @Import注解来相互引用

@Configuration
public class CDPlayerConfig {
}

.

@Configuration
@Import(CDPlayerConfig.class)
public class CDPlayerConfig2 {
}

.

@Configuration
@Import({CDPlayerConfig.class, CDPlayerConfig2.class})
public class AllConfig {
}

<br>

###Java配置beanXML 配置 bean的混合使用

  1. 在 Java 的配置文件中引用 XML 的配置文件:

       @Configuration
       @Import({CDPlayerConfig.class, CDPlayerConfig2.class})
       @ImportResource("config.xml")
      public class AllConfig {}
    
  2. 在 XML 配置文件中引用 Java 的配置文件

    <import resource="applicationContext.xml"/>
    <bean class="chapter02.javaBean.AllConfig"/>
    

© 著作权归作者所有

上一篇: Spring in Action4-AOP
下一篇: LinkedList源码分析
TSMYK
粉丝 96
博文 80
码字总数 196578
作品 0
成都
程序员
私信 提问
《Spring5学习》 01 装配Bean之自动化装配

Spring的自动化装配就便利性方面远远优于其他装配方法,这也是业界目前主要采用的Bean装配机制。Spring基于组建扫描和自动装配实现自动化装配,能将用户的显示配置降到最低。以下通过一段代码...

老韭菜
2018/08/05
0
0
2019年一线大厂春招:Spring面试题和答案合集(上篇)

什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为...

别打我会飞
03/31
0
0
细说不懂Spring底层原理带来的伤与痛

什么是spring? Spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为...

老道士
2018/09/04
0
0
[转载]69道Spring面试题和答案

原文地址 http://ifeve.com/spring-interview-questions-and-answers/ 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概......

王木东
2017/03/27
0
0
Spring中依赖注入的四种方式

在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式; · 使用构造器注入; · 使用Filed注入(用于注解方式). 使用属性的setter方法注入 首...

Zero零_度
2015/04/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

以太坊中文文档翻译-区块

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 区块(Blocks) 区块相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中不单独...

Tiny熊
21分钟前
1
0
Linux 内核的一个问题

是virtio 驱动,但是没有启动 virtio-mmio virtio-mmio.0: Failed to enable 64-bit or 32-bit DMA. Trying to continue, but this might not work.....[ 1.047924] md: ... autorun......

MtrS
45分钟前
2
0
MySQL主从配置

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步 一、 MySQL主从介绍

tobej
55分钟前
2
0
读书replay《博弈与社会》.1.20190526

前情 《美丽心灵》,一部讲数学家约翰·福布斯·纳什的电影,我第一次听到博弈理论就是在这部电影里。看过电影之后就一直想知道,博弈论究竟讲了什么。很久之后,20190417这天,我刷JD的购物...

wanxiangming
今天
2
0
iOS TableView层级结构剖析

首先上图 下面来分析一下tableView的层级结构 tableView的组成: 1.整个tableView有且仅有一个头部和尾部就是tableViewHeadView和tableViewFooterView2.tableView 可以有多个section,一个s...

HOrange
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部