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企业应用实战


原创粉丝点击