创建加载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,如:
随机推荐
- Kubernetes 1.15部署日记-使用kubeadm--<1-2-3-4>
2019年9月17日 由于此次日记篇幅较长blog限制直接使用word发布所以分成几篇来发. 1.环境准备 10.110.149.172|192.168.111.51 K8s-1 Centos7.5 ...
- redhat6.7环境下oracle11gR2 RAC静默安装
(一)基础环境 虚拟机环境 :vmware workstation 12 操作系统 : redhat6.7 - 64bit 数据库版本 :11.2.0.4 (二)安装前的环境准备 (2.1)配置 ...
- Spring中抛出异常时,既要要返回错误信息,还要做事务回滚
情况一:如果没有在程序中手动捕获异常,如下代码事务会回滚 情况二:如果在程序中自已捕获异常未往外抛,如下代码事务不会回滚 如果doDbStuff2()这个操作数据库的方法抛出异常,因为将异常捕获未往外 ...
- [算法竞赛][2018][蓝桥杯][LanqiaoCA]第九届蓝桥杯A组
题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...
- python高级特性-迭代器
凡是可作用于for循环的对象都是Iterable类型: 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列: 集合数据类型如list.dict.str等是Itera ...
- python中while循环的基本使用
一.while循环 while 条件: 如果条件为True,会一直循环 代码块(循环体) else: 当上面的条件为假.才会执行 执行顺序:判断条件是否为真.如果真,执行循环 ...
- IBM MQ V6.0 for Windows7
https://blog.csdn.net/guolf521/article/details/87913141 websphere 商用中间件MQ 轨道交通使用
- 一 创建一个springboot项目之(微信点餐系统的设计与开发)
第一步:收到项目需求,进行数据库表的设计. 1.角色的划分: 卖家: 订单,类目 买家: 商品列表 2.功能模块的划分: 商品:商品列表 订单: 订单创建,订单查询,订单取消 类目:基于管理的功 ...
- 《hello-world》第九次团队作业:【Beta】Scrum meeting 2
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目验收 团队名称 <hello--wor ...
- 《奋斗吧!菜鸟》第九次团队作业:Beta冲刺
项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11056511.html 团队名称 奋斗吧!菜鸟 作业学习目标 B ...