实例化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</