Spring Bean装配方式

Spring装配机制

  • 在xml中进行显示配置
  • 在Java中进行显示配置
  • 隐式bean发现机制和自动装配

自动化装配bean

  • 组件扫描(component scanning),Spring会自动发现应用上下文中的bean
  • 自动装配(autowiring),Spring自动知足bean之间的依赖

Speak.javajava

public interface Speak {
    void say();
}

ChineseSpeak.javaspring

@Component("chineseSpeak")
public class ChineseSpeak implements Speak {
    public void say() {
        System.out.println("用中文说");
    }
}

SpeakConfig.javaspa

@Component
@ComponentScan(basePackages = "com.xqh.spring.autowire")
public class SpeakConfig {
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpeakConfig.class)
public class SpeakTest {
    @Autowired
    private Speak speak;

    @Test
    public void sayTest(){
        speak.say();
    }
}

@Component注解告诉Spring这是一个组件类并为之建立bean,bean的id为首字母变小写的类名code

@ComponentScan注解启用组件扫描并默认扫描与配置类相同的包component

@Autowired注解会在Spring上下文中在自动装配符合的beanxml

经过java代码装配bean

  • 建立配置类并标记 @Configuration注解对象

  • 建立方法标记 @Bean注解it

Speak.java自动化

public interface Speak {
    void say();
}

ChineseSpeak.javaio

public class ChineseSpeak implements Speak {
    public void say(){
        System.out.println("经过java代码装配-用中文说");
    }
}

SpeakConfig.java

@Configuration
public class SpeakConfig {
    @Bean
    public Speak chineseSpeak() {
        return new ChineseSpeak();
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpeakConfig.class)
public class SpeakTest {
    @Autowired
    private Speak speak;

    @Test
    public void sayTest(){
        speak.say();
    }
}

@Configuration标记的类表名是一个配置类而且包含在Spring上下文中如何建立bean的细节

@Bean注解告诉Spring这个方法将返回一个对象而且注册为Spring上下文中的bean

经过xml装配bean

  • 建立Spring Xml配置文件
  • 在JavaConfig中导入bean配置文件

Speak.java

public interface Speak {
    void say();
}

ChineseSpeak.java

public class ChineseSpeak implements Speak {
    public void say() {
        System.out.println("经过xml装配bean-用中文说");
    }
}

SpeakConfig.java

@Configuration
@ImportResource("classpath:spring-beans.xml")
public class SpeakConfig {
}

spring-beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="chineseSpeak" class="com.xqh.spring.xmlconfig.ChineseSpeak"></bean>
</beans>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpeakConfig.class)
public class SpeakTest {
    @Autowired
    private Speak speak;

    @Test
    public void sayTest(){
        speak.say();
    }
}
相关文章
相关标签/搜索