创建加载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对象添加到缓存当中,供下次调用使用。
创建加载bean的实例的更多相关文章
- Spring多种加载Bean方式简析
1 定义bean的方式 常见的定义Bean的方式有: 通过xml的方式,例如: <bean id="dictionaryRelMap" class="java.ut ...
- 【死磕 Spring】----- IOC 之 加载 Bean
原文出自:http://cmsblogs.com 先看一段熟悉的代码: ClassPathResource resource = new ClassPathResource("bean.xm ...
- spring加载bean流程解析
spring作为目前我们开发的基础框架,每天的开发工作基本和他形影不离,作为管理bean的最经典.优秀的框架,它的复杂程度往往令人望而却步.不过作为朝夕相处的框架,我们必须得明白一个问题就是sprin ...
- IoC 之加载 Bean:总结
上文中我们将bean已经加载到了IOC容器中,接下来我们将把IOC加载Bean出来进行代码解析 备注:(有些解释是参考别个博客的相关解释 )一起探讨请加我QQ:1051980588 bean 的初始化 ...
- Bean 注解(Annotation)配置(1)- 通过注解加载Bean
Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...
- Bean XML 配置(1)- 通过XML配置加载Bean
系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...
- 字节码加载和class实例的顺序问题
刷头条的时候看到了这个: 你做会错的一道Java面试题:字节码加载和class实例的顺序问题 以前也看到过,应该是阿里的校招笔试题,当时懒得理这种工作中毫无意义的东西. 今天突然来了兴趣,就想看看能 ...
- sping加载bean都发生了些什么
问题描述:使用@Autowired注入的类,没有实例化 //Controller @RequestMapping(value="/deepblue") @Controller pu ...
- spring Boot加载bean
1.SpringBoot中加载bean,可以使用注解@compenent直接加载到applicationContext容器中 2.在直接类@Configuration中,手动注册bean,如:
随机推荐
- python(列表函数)
一.列表函数 1.sort()原址排序 参数默认reverse=False时为正序排序 list1 = [1,3,5,2,1,23,18] list1.sort() print (list1) 当参数 ...
- python selenium八大定位方法
一.定位方法 注意:元素属性必须唯一存在 #id定位 find_element_by_id() #name定位 find_element_by_name() #class_name定位 find_el ...
- 资源管理与调度系统-资源管理系统Mesos
资源管理与调度系统-资源管理系统Mesos 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框 ...
- git---怎样将分支上的一个单文件合并到主分支上(master)
一.首先切换到主分支 注意将分支上的数据全部提交 以免造成数据冲突或丢失 git checkeout master 二.选择要合并的文件 git checkout --patch 分支名称 要合并 ...
- docker 运行ELK
docker network create somenetwork docker run -d --name elasticsearch --net somenetwork -p 9200:9200 ...
- java.lang.RuntimeException: org.springframework.dao.DuplicateKeyException:
java.lang.RuntimeException: org.springframework.dao.DuplicateKeyException: ### Error updating databa ...
- 《BUG创造队》作业8:软件测试与Alpha冲刺(第三天)
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 BUG创造队 作业学习目标 (1)掌握软件测试基础技术.(2)学习 ...
- Vue钩子函数
Vue的生命周期函数 beforeCreate:function(){ console.log('1-beforeCreate 初始化之后'); }, created:function(){ cons ...
- test20190830 NOIP 模拟赛
100+70+0=170.这套题早就被上传到BZOJ上了,可惜我一到都没做过. BZOJ4765 普通计算姬 小G的计算姬可以解决这么个问题:给定一棵n个节点的带权树,节点编号为1到n,以root为根 ...
- 开启idea自动Build功能
修改Intellij IDEA的配置两步:1.setting -> Compile -> Build project automatically --> 选中 2.CTRL + SH ...