Spring4详解系列(二)装配Bean

1.Spring提供了三种装配bean的方式:

Spring容器负责创建应用程序中的Bean并通过DI来协调这样对象之间的关系。Spring主要提供了三种主要的装配机制:

  1. 在XML中进行显示配置
  2. 在Java中进行显示配置
  3. 隐式的Bean的发现机制和自动装配

2.自动化装配Bean

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

  • 组件扫描(Spring自动发现应用中上下文所需要的创建的Bean),
  • 自动装配(Spring自动满足Bean之间的依赖)

配置组件扫描包(组件扫描)

  • 在Java类中配置组件扫描 @ComponentScan("com.test.controller")
  • 在XML配置文件配置组件扫描 <context:component-scan base-package="com.test.controller,com.test.service"/>

创建可被发现的Bean

@Component
public class A{

    private boolean abc() {
        System.out.println("测试...");
    }

}

@Component
public class B{

    @Autowired
    private A a;

    private boolean bcd() {
        a.abc();
    }

}

为组件扫描的Bean命名及自动配置

@Configuration
// 三种不同的扫描配置
//@ComponentScan(basePackages= {"com.b.dao","com.c.dao"})
//@ComponentScan(basePackageClasses= {A.class,B.class})
@ComponentScan(basePackages= "com.a.dao")
public class Spring4Test {
	
	// 两种自动配置方式,哪种都是可以的
	@Autowired
	private InsideTest insideTest;
	@Inject
	private InsideTest_ insideTest_;

}

/**
 *   注:Spring支持将@Named作为@Component注解的代替方案,两者有一些细微的差异
 *   但是在大多数场景中,它们是可以相互替换的。
*/
@Component("insideTest")
class InsideTest{
	// 这里给组件命名的方式是@Component("insideTest")
}
@Named("insideTest_")
class InsideTest_{
	// 这里给组件命名的方式是@Named("insideTest_")
}

3.通过Java代码装配Bean

// 创建配置类
@Configuration
public class Spring4Test {
	@Bean
	public AookTest aook(){
		return new AookTest();
	}
	@Bean
	public BookTest book(){
		return new BookTest(aook());
	}
}
// 测试类AookTest
class AookTest{
	public void month() {
		System.out.println("调用成功...");
	}
}
//测试类BookTest
class BookTest{
	private AookTest aookTest;
	public BookTest(AookTest aook) {
		this.aookTest = aook;
	}
	public void mainTest() {
		aookTest.month();
	}
}
//测试类CookTest
class CookTest{
	public static void main(String[] args) {
		AnnotationConfigApplicationContext annot = 
				new AnnotationConfigApplicationContext(Spring4Test.class);
		BookTest bean = annot.getBean(BookTest.class);
		bean.mainTest();
	}
}

4.通过XML装配Bean

在Spring低版本中,XML中采用的是基于DTD的配置方式,Spring4.0配置升级后是基于Schema的配置方式,虽然升级是向后兼容的,但后者是我们首选的XML配置方式。 一个基本的基于Schema的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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/aop
               http://www.springframework.org/schema/aop/spring-aop.xsd">

        <bean id="bookTest" class="com.china.BookTest">
            <property name="aookTest" ref="aookTest" />
        </bean>
        
        <bean id="aookTest" class="com.china.AookTest"/>
</beans>
  • xmlns="http://www.springframework.org/schema/beans" 默认命名空间
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 自定义命名空间,
  • xsi是简称 xsi:schemaLocation 是个命名空间对应的schema文件 

实际项目中我们通常都会选择组合使用 :

①隐式的Bean发现机制和Java中进行装配进行组合   ②隐式的Bean发现机制和XML配置进行组合

这样便于我们更方便的配置Spring项目

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值