spring笔记
来源:互联网 发布:word2010表格数据求和 编辑:程序博客网 时间:2024/06/14 09:26
spring核心容器的理论很简单:spring核心容器就是一个超级大工厂,所有的对象(包括数据源、Hibernate SessionFactory等基础性资源)都会被当成spring核心容器管理的对象。spring把容器中的一切对象统称为bean。
配置文件中的<bean.../>元素默认以反射方式来调用该类无参数的构造器。
比如:
<bean id="person" class="com.ken.Person">
<property name="axe" ref="axe"/>
</bean>
spring框架解析该<bean.../>元素后将可以得到两个字符串,其中idStr的值为“person”(解析<bean.../>元素的id属性得到的值),classStr的值为“com.ken.Person”(解析<bean.../>元素的class属性得到的值)。
也就是说,spring底层会执行如下形式的代码:
String idStr = ...
String classStr = ...
Class clazz = Class.forName(classStr);
Object obj = clazz.newInstance();
container.put(idStr, obj);
<property.../>作为<bean.../>元素的子元素,它驱动spring在底层以反射执行一次setter方法。其中,的name属性值决定执行哪个setter方法。
也就是说,spring底层会执行如下形式的代码:
String nameStr = ...
String refStr = ...
String setterName = "set" +nameStr.subString(0,1).toUpperCase() + nameStr.subString(1);
Object paramBean = container.get(refStr);
Method setter = clazz.getMethod(setterName, paramBean.getClass());
setter.invoke(obj, paramBean);
也就是说,<bean.../>元素驱动spring调用构造器创建对象;<property.../>子元素驱动spring执行setter方法,这两部是先后执行的,中间几乎没有任何间隔。
ApplicationContext是spring容器最常用的接口,它有两个实现类:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext。对于java项目而言,类加载路径总是最稳定的,因此通常总是使用ClassPathXmlApplicationContext。
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//创建容器
Person p = ac.getBean("person", Person.class);
spring框架的核心功能有两个:
1.spring容器作为超级大工厂,负责创建、管理所有的java对象,这些java对象被称为bean。
2.spring容器管理容器中bean之间的依赖关系,spring使用“依赖注入”的方式来管理bean之间的依赖关系。
依赖注入是一种优秀的解耦方式。依赖注入让spring的bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。
使用spring框架之后的两个主要改变是:
1.程序无须使用new调用构造器去创建对象。所有的java对象都可以交给spring容器去创建。
2.当调用者需要调用被依赖对象的方法时,调用者无须主动获取被依赖对象,只要等待spring容器注入即可。
spring推荐面向接口编程,这样可以更好地让规范和实现分离,从而提供更好的解耦。对于一个Java EE应用,不管是dao组件,还是业务逻辑组件,都应该先定义一个接口,该接口定义了该组件应该实现的功能,但功能的实现则由其实现类提供。
从spring 2.0开始,spring推荐采用xml schema来定义配置文件的语义约束。xml配置文件提供了一些标签,这些标签使配置更简单。
chinese实例与具体的Axe实现类没有任何关系,chinese实例仅仅与Axe接口耦合,这就保证了chinese实例于Axe实例之间的松耦合——这也是spring强调面向接口编程的原因。
1.设置注入
2.构造注入。就是驱动spring在底层以反射方式执行带指定参数的构造器,当执行带参数的构造器时,就可利用构造器参数对成员变量执行初始化——这就是构造注入的本质。
<bean.../>元素默认总是驱动spring调用无参数的构造器来创建对象,那怎样驱动spring调用有参数的构造器去创建对象呢?<constructor-arg.../>子元素,每个<constructor-arg.../>子元素代表一个构造器参数。
<bean id="chinese" class="com.ken.Chinese">
<constructor-arg ref="steelAxe"/> //驱动spring调用Chinese带一个参数的构造器来创建对象
</bean>
上面的代码相当于:
String idStr = ...
String refStr = ...
Object paramBean = container.get(refStr);
Object obj = new com.ken.Chinese(paramBean);
container.put(idStr, obj);
摘录于:轻量级java ee企业应用实战
- Spring笔记
- Spring笔记
- Spring笔记
- Spring笔记
- spring 笔记
- Spring笔记
- Spring 笔记
- spring笔记
- Spring 笔记
- Spring笔记
- Spring笔记
- Spring笔记
- Spring笔记
- spring 笔记
- Spring笔记
- Spring笔记
- spring笔记
- Spring笔记
- APP中集成移动端车牌识别系统都能达到什么效果
- 数据结构实验一
- SpringBoot集成Redis,以及MybatisPlus分页、Mapper的使用(一)
- Unity简单利用屏幕坐标转换实现鼠标控制物体移动
- poj3669 之bfs解法
- spring笔记
- nvm和nodejs安装使用 (转)
- 多表查询内连接与外连接的区别;多表之间内连接;(常用)(只连接两个表都有效数据); 多表之间的外连接:(查询所有的内容); 多表内连接:(显示和隐式结果是一样的,得到的是交集的部分)
- android+postman
- maven管理jar包和传统方法管理jar的比较
- JUnit(二)高级之运行器_MD
- C#将DataGridView控件中的数据源转换为datatable内存表
- 2016CCPC东北地区大学生程序设计竞赛 H题 Basic Data Structure (模拟+双端队列)
- docker -v :rw :ro