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

  • 相关阅读:
    树形dp(HDU1520)
    POJ3071(概率DP)
    网络流之FF算法(poj1273&&洛谷P3376)
    二分图匹配之匈牙利算法
    江西财经大学第二届程序设计竞赛——E
    浅谈数位dp
    浅谈数位dp——hdu 不要62
    buns~~~一个简单的背包问题
    POJ 1066 Treasure Hunt (线段相交)
    POJ 2653 Pick-up sticks (线段相交)
  • 原文地址:https://www.cnblogs.com/linlf03/p/11182476.html
Copyright © 2020-2023  润新知