创建加载bean的实例

一、创建实例

工程的结构如下图

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对象添加到缓存当中,供下次调用使用。

原文地址:https://www.cnblogs.com/linlf03/p/11182476.html