实例化Bean的三种方法

前言

Spring框架里面最核心的就是Bean的概念。而在这里我们将讲述创建Bean实例的三种方法。

目前创建的Bean的方法有三种。
(1)通过XML配置Bean
(2)通过注解声明Bean
(3)通过JavaConfig配置Bean


XML配置Bean

缺点:
(1)XML配置繁琐。
(2)无法在编译的时候发现配置错误。

实现方法:
(1)声明类
(2)通过XML配置文件,定义类对应的Bean实例
(3)spring扫描对应的XML配置文件创建Bean实例

步骤一:声明类

//声明类
public class Rabbit {
    private String eyes;
    private String legs;

    public Rabbit(String eyes, String legs) {
        this.eyes = eyes;
        this.legs = legs;
    }

    public String getEyes() {
        return eyes;
    }

    public void setEyes(String eyes) {
        this.eyes = eyes;
    }

    public String getLegs() {
        return legs;
    }

    public void setLegs(String legs) {
        this.legs = legs;
    }
}

步骤二:通过XML配置文件,定义类对应的Bean实例

(1)通过调用类中的构造函数,创建Bean。

因为类中会有无参构造函数和有参构造函数。所以通过构造函数创建Bean的方式也有两种。一种是调用无参构造函数创建Bean,一种是调用有参构造函数创建Bean。

方法一:调用有参构造函数创建Bean

//调用带参构造函数,声明Bean
<bean id="rabbit" class="com.test.domain.Rabbit">
	<constructor-arg name="eyes" value="兔子的眼睛"/>
	<constructor-arg name="legs" value="兔子的退"/>
</bean>

如上所示,id用于唯一确定一个Bean,class指对应类的在项目的位置,name指的是类中字段的名称,value指要给对应字段要赋的值。

方法二:调用无参构造函数创建Bean

//调用无参构造函数,声明Bean
<bean id="rabbit" class="com.test.domain.Rabbit">
</bean>

如上所示,便声明了一个Bean。


基于注解创建Bean

实现步骤:
(1)类添加注解
(2)spring扫描对应的class文件创建Bean实例

实例如下:

//声明类
//添加注解
@Resource
public class Rabbit {
    private String eyes;
    private String legs;

    public Rabbit(String eyes, String legs) {
        this.eyes = eyes;
        this.legs = legs;
    }

    public String getEyes() {
        return eyes;
    }

    public void setEyes(String eyes) {
        this.eyes = eyes;
    }

    public String getLegs() {
        return legs;
    }

    public void setLegs(String legs) {
        this.legs = legs;
    }
}

然后spring就会根据扫描到该类,看到注解后,就自动生成对应的Bean。


JavaConfig配置Bean

实现:
(1)声明对应的方法,用于创建Bean。其中BeanId就是方法的名称。
(2)spring扫描到@Bean方法,就会根据方法,创建对应的Bean。

//声明类
public class Rabbit {
    private String eyes;
    private String legs;

    public Rabbit(String eyes, String legs) {
        this.eyes = eyes;
        this.legs = legs;
    }

    public String getEyes() {
        return eyes;
    }

    public void setEyes(String eyes) {
        this.eyes = eyes;
    }

    public String getLegs() {
        return legs;
    }

    public void setLegs(String legs) {
        this.legs = legs;
    }
}

//通过@Bean注解,创建对应的Bean
@Bean
public Rabbit rabbit(){
	Rabbit rabbit = new Rabbit();
	return userDao;
}

注意了,这里有个误区,这里通过JavaConfig方式配置Bean,里面虽然也是用了new关键词去创建一个Bean,但是什么时候去调用这个方法去实例一个对象,依旧是由IOC容器控制的,所以依旧符合IOC控制反转的理念。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值