一、创建实例
工程的结构如下图

1、创建接口
public interface Person {
public void setName(String name);
public String say();
}
2、创建接口实现
public class PersonImpl implements Person {
private String name;
public void setName(String name) {
this.name = name;
}
public String say() {
if(null == name){
return "Nick";
}
return "Hello," + name;
}
}
3、引入commons-logging.jar 和spring-asm.jar
4、创建beans.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
">
<bean id="person" class="com.example.spring.PersonImpl">
<property name="name" value="Tom" />
</bean>
</beans>
5、创建测试类
public class SpringTest {
public static void main(String[] args) {
ClassPathResource resource = new ClassPathResource("com/example/spring/beans.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource);
Person person = (Person)factory.getBean("person");
System.out.println(person.say());
}
}
6、总结:
1、Spring的bean实际上是缓存咋CurrentHashMap对象中
2、在创建bean之前,首先需要将该Bean的创建标识定好,表示该bean已经或是即将被创建,为的是增强缓存的效率。
3、根据bean的scope属性来确定是singleton还是propotype等范围,然后创建相应的bean对象
4、通过Java反射来创建Bean的实例,在创建之前检查访问修饰符,如果不是public,则调用setAccessibile(true)来突破Java的语法限制,使得可以通过如私有的构造方法来创建对象。
5、接下来,寻找bean的属性值,完成属性的注入。
6、将所创建出的singleton对象添加到缓存当中,供下次调用使用。