Spring框架基础概念
Spring是一个开源的控制反转(Inversion of Control, IOC)和面向切面(AOP)的容器框架,它的主要目的是简化企业开发。 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。所谓依赖注入(Dependency Injection,DI)是指:在运行期,由外部容
Spring是一个开源的控制反转(Inversion of Control, IOC)和面向切面(AOP)的容器框架,它的主要目的是简化企业开发。
所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。
所谓依赖注入(Dependency Injection,DI)是指:在运行期,由外部容器动态地将依赖对象注入到组件中。
在项目中引入Spring可以带来的好处:
l 降低组件之间的耦合度,实现软件各层之间的解耦合
Controller——>Service——>DAO
l 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需要处理复杂的事务传播。
l 容器提供单例模式支持,开发人员不再需要自己编写实现代码。
l 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
l 容器提供的荣多辅助类,使用这些类能够加快应用的开发,如JdbcTemplate、HibernateTemplate。
l Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。
轻量级与重量级概念的划分:
划分的主要依据是它使用了多少服务,使用的服务越多,容器要为普通java对象做的工作就越多,必然会影响到应用的发布时间或者是运行性能。
对于Spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务,如果应用使用的服务很少,如:只使用了Spring核心服务,那么我们可以认为此时应用属于轻量级的,如果应用使用了Spring提供的大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认为应用提供了EJB规范中所有的功能,所以它属于重量级的容器。
实例化Spring容器(两种方式):
方法一:
在类路径下寻找配置文件来实例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{“beans.xml”});
方法二:
在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ct = new FileSystemXmlApplicationContext(new String[]{“d://beans.xml”});
Spring的配置文件可以指定多个,可以通过String数组传入。
三种实例化bean的方式:
1. 使用类构造器实例化:
<bean id =“personService” class=“cn.itcast.PersonServiceBean”/>
2. 使用静态工厂方法实例化:
<bean id =“personService” class=“cn.itcast.service. PersonServiceBeanFactory” factory-method=“createOrder”/>
3. 使用实例工厂方法实例化:
<bean id =“personServiceFactory” class=“cn.itcast.service. PersonServiceBeanFactory” />
<bean id =“personService” factory-bean=“personServiceFactory” factory-method=“createPersonServiceBean”/>
Bean的作用域(scope属性):
Singleton(默认):在每个Spring IoC容器中,一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean才会初始化bean。如:
<bean id =“personService” class=“cn.itcast.PersonServiceBean” lazy-init=“true”/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true”,如下:<beans default-lazy-init=“true” …>
Prototype:每次从容器获取bean都是新的对象实例,且只有获取bean才会初始化bean。
指定bean的初始化方法和销毁方法(生命周期Lifecycle):
<bean id=“xxx” class=“cn.itcast.PersonServiceBean” init-method=“init” destroy-method=“destroy”>
注入依赖对象:
基本类型对象注入:
<bean id=“personService” class=“cn.itcast.PersonServiceBean”>
<constructor-arg index=“0” type=“java.lang.String” value=“xxx”/> // 构造器注入
<property name=“name” value=“zhao”/> // 属性setter方法注入
</bean>
注入其他bean:
方式一
<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean" />
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
<property name="personDao" ref="personDao"></property></bean>
方式二(使用内部bean,但该内部bean不能被其他bean使用)
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
<property name="personDao">
<bean class="cn.itcast.dao.impl.PersonDaoBean" />
</property>
</bean>
更多推荐
所有评论(0)