六、基于xml的bean实例化和依赖注入

实例化bean

bean 定义基本上就是用来创建一个或多个对象的配置,当需要一个 bean 的时候,容器查看配置并且根据 bean 定义封装的配置元数据创建(或获取)一个实际的对象。

如果您想要配置的一个bean定义static嵌套类,你必须使用二进制嵌套类的名称
举例来说,如果你有一个叫做类Foo的com.example包,而这个 Foo类有一个static叫做嵌套类Bar,在价值’class’ 上的bean定义属是…com.example.Foo Bar使 名称中的字符到嵌套类名从外部类名分开。

JavaBean

JavaBean:是本质就是一个POJO类,但具有一下限制:
1. 该类必须要有公共的无参构造器,如public HelloImpl4() {};
2. 属性为private访问级别,不建议public,如private String message;
3. 属性必要时通过一组setter(修改器)和getter(访问器)方法来访问;
4. setter方法,以“set” 开头,后跟首字母大写的属性名,如“setMesssage”,简单属性一般只有一个方法参数,方法返回值通常为“void”;
5. getter方法,一般属性以“get”开头,对于boolean类型一般以“is”开头,后跟首字母大写的属性名,如“getMesssage”,“isOk”;
6. 还有一些其他特殊情况,比如属性有连续两个大写字母开头,如“URL”,则setter/getter方法为:“setURL”和“getURL”,其他一些特殊情况请参看“Java Bean”命名规范。

Spring具有非常大的灵活性,它提供了三种主要的装配机制
1. 通过配置文件xml类提供。
2. 通过注解。bean的创建默认是采用无参的构造方法进行初始化。
3. 通过@bean注解的方法。

创建bean的三种方式

1. 通过构造函数实例化

BeanExample

package com.lf.bean;

/**
 * Created by LF on 2017/4/6.
 */
public class BeanExample {
   
    private String name;

    private int age;

    private boolean student;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isStudent() {
        return student;
    }

    public void setStudent(boolean student) {
        this.student = student;
    }
}

当使用基于XML的元数据配置文件,可以这样来指定 bean 类

<?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="exampleBean" class="com.lf.bean.BeanExample"></bean>

</beans>

2.使用静态工厂方法实例化

当采用静态工厂方法创建 bean 时,除了需要指定 class 属性外,还需要通过 factory-method 属性来指定创建 bean 实例的工厂方法。Spring将调用此方法(其可选参数接下来介绍)返回实例对象,就此而言,跟通过普通构造器创建类实例没什么两样。

下面的 bean 定义展示了如何通过工厂方法来创建bean实例。注意,此定义并未指定返回对象的类型,仅指定该类包含的工厂方法。在此例中,createInstance() 必须是一个 static 方法。

package com.lf.bean;

/**
 * Created by LF on 2017/4/6.
 */
public class ClientService {
   
    private static ClientService clientService = new ClientService();

    private ClientService() {
    }

    public static ClientService createInstance() {
        return clientService;
    }
}
  <bean class="com.lf.bean.ClientService" factory-method="createInstance"></bean>

3.使用实例工厂方法实例化

与通过 静态工厂方法 实例化类似,通过调用工厂实例的非静态方法进行实例化。 使用这种方式时,class属性必须为空,而factory-bean属性必须指定为当前(或其祖先)容器中包含工厂方法的bean的名称,而该工厂bean的工厂方法本身必须通过
factory-method属性来设定。

package com.lf.service;


/**
 * Created by LF on 2017/4/6.
 */
public class DefaultServiceLocator</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值