Spring Bean详细讲解 什么是Bean?

  • Post author:
  • Post category:其他


什么是Bean?

Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。

Spring 容器会自动完成@bean对象的实例化。

创建应用对象之间的协作关系的行为称为:

装配(wiring)

,这就是依赖注入的本质。

Spring 三种配置方案

1.在XML中进行显示配置

2.使用Java代码进行显示配置

3.隐式的bean发现机制和自动装配


推荐方式:

3>2>1

一、自动化装配bean

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

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

package com.stalkers;

/**
 * CD唱片接口
 * Created by stalkers on 2016/11/17.
 */
public interface ICompactDisc {
    void play();
}
package com.stalkers.impl;

import com.stalkers.ICompactDisc;
import org.springframework.stereotype.Component;

/**
 * Jay同名专辑
 * Created by stalkers on 2016/11/17.
 */
@Component
public class JayDisc implements ICompactDisc {

    private String title = "星晴";

    public void play() {
        System.out.println(title + ":一步两步三步四步,望着天上星星...");
    }
}


Component注解作用:


表明该类会作为组件类。

不过,组件扫描默认是不开启用的,我们还需要显示配置下Spring,从而命令它去寻找带有@Component注解的类,并为其创建bean。

1.java code开启组件扫描:

其中,如果CompoentScan后面没有参数的话,默认会扫描与配置类相同的包

@Configuration
@ComponentScan
public class CDPlayerConfig {
    @Bean
    public ICompactDisc disc() {
        return new JayDisc();
    }
}

2.xml启动组件扫描

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

测试代码

package com.stalkers;

import com.stalkers.config.CDPlayerConfig;
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;

/**
 * Created by stalkers on 2016/11/18.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class TestPlay {
    @Autowired
    private ICompactDisc jayDisc;

    @Test
    public void play() {
        jayDisc.play();
    }
}

在ComponentScan扫描的包中,所有带有@Component注解的类都会创建为bean

为组件扫描的bean命名

Spring应用上下文种所有的bean都会给定一个ID。在前面的例子中,尽管我们没有明确地为JayDisc bean设置ID,但是Spring会默认为JayDisc设置ID为jayDisc,

也就是将类名的第一个字母变成小写

如果想为这个bean设置不同的ID,那就将期望的值传递给@Component注解

@Component("zhoujielun")
public class JayDisc implements ICompactDisc {
  ...
}<



版权声明:本文为weixin_43277643原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。