java 装配_JAVA入门[13]-Spring装配Bean

一、概要

Sping装配bean主要有三种装配机制:

在XML中进行显式配置。

在Java中进行显式配置。

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

原则:

建议尽可能地使用自动配置的机制,显式配置越少越好。当你必须要显式配置bean的时候(比如,有些源码不是由你来维护的,而当你需要为这些代码配置bean的时候),我推荐使用类型安全并且比XML更加强大的JavaConfig。最后,只有当你想要使用便利的XML命名空间,并且在JavaConfig中没有同样的实现时,才应该使用XML。

二、自动装配

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

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

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

1.组件扫描

@Component注解:添加注解表明该类会作为组件类,并告知Spring要为这个类创建bean。

package bean;

import org.springframework.stereotype.Component;

@Component

public class Category {

private int cateId;

public int getCateId() {

return this.cateId;

}

public void setCateId(int id) {

this.cateId = id;

}

@Override

public String toString() {

return " 商品类型 id=" + this.cateId;

}

}

2.启用组件扫描两种方式:

①使用XML来启用组件扫描,在applicationContext.xml配置:

单元测试:

@ContextConfiguration(locations = "classpath*:applicationContext.xml")

@RunWith(SpringJUnit4ClassRunner.class)

public class testAutowireXml {

@Autowired

private Category category;

@Test

public void TestXmlBean() {

Assert.assertNotNull(category);

}

}

②使用java配置

前面的bean类不做任何调整,通过@ComponentScan注解实现自动扫描。例如新建java配置文件BeanConfig.java

@Configuration

@ComponentScan(basePackageClasses = bean.Category.class)

public class BeanConfig {

}

单元测试:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = BeanConfig.class)

public class testAutowireJava {

@Autowired

private Category category;

@Test

public void categoryNotNull() {

Assert.assertNotNull(category);

}

}

三、JavaConfig装配bean

上面的BeanConfig就是用java config方式实现的。java Config也是一个java类,但它不应该包含任何业务逻辑,也不应该侵入到业务逻辑代码之中,通常会将JavaConfig放到单独的包中。

创建java config关键是使用@Configuration ,表明这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节。

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

我们新建一个config文件JavaConfig.java,是在BeanConfig.java基础上去掉@ComponentScan注解,并添加category()返回Category实例。

@Configuration

public class JavaConfig {

@Bean

public Category category(){

return new Category();

}

}

单元测试:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = JavaConfig.class)

public class testJavaConfig {

@Autowired

private Category category;

@Test

public void testCategoryBean(){

Assert.assertNotNull(category);

}

}

四、XML方式装配bean

在JAVA入门[3]—Spring依赖注入这篇笔记中包含了如何通过xml方式装配bean实例。

1.构造器传参

①首先为Category添加构造函数:

public class Category {

private int cateId;

public Category() {

}

public Category(int id) {

cateId = id;

}

public int getCateId() {

return this.cateId;

}

public void setCateId(int id) {

this.cateId = id;

}

@Override

public String toString() {

return " 商品类型 id=" + this.cateId;

}

}

②applicationContext添加bean节点,为constructor-arg设置Id或者index。

③单元测试:

@ContextConfiguration(locations = "classpath*:applicationContext.xml")

@RunWith(SpringJUnit4ClassRunner.class)

public class testAutowireXml {

@Autowired

private Category category;

……

@Test

public void testId(){

Assert.assertEquals(100,category.getCateId());

}

}

④c-命名空间

这种语法用起来简化一些。

7267630ac7488ecc3cf90b7a374933b6.png

调整②中的bean节点:

2.设置属性 :

①通过为bean设置property实现属性

②p-命名空间

前面的bean配置可以简化为:

4fdf2dcb5b680c22aa50ee4fedef081f.png

五、属性占位符

Spring支持将属性定义到外部的属性的文件中,并使用占位符值将其插入到Spring bean中。在Spring装配中,占位符的形式为使用“${ ... }”包装的属性名称。

config.properties:

cateid=100

spring-config.xml:

classpath:properties/config.properties

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值