开源的控制反转(Inversion of Control,Ioc)和面向切面(AOP)的容器框架
IOC(控制反转)
public class PersonServiceBean {
private PersonDao personDao=new PersonDaoBean();
public void save(Person person){
personDao.save(person);
}
}
PersonDaoBean 是应用在内部创建及维护的。所谓控制反转就是应用本书不负责依赖对象的创建及维护,依赖对象的 创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。
依赖注入(Dependency Injection )
1.使用构造器注入
2.使用属性setter方法注入
3.使用field 注入(用于注解方式)
注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会 产生未知情况,开发人员无法预见最终的装配结果。
1.手工装配依赖对象
2.自动装配依赖对象
当我们把依赖对象交给外部容器负责创建,那么personServicebean类可以改成如下:
public class PersonServiceBean {
private PersonDao personDao;
public PersonServiceBean(PersonDao personDao){
this.personDao=personDao;
}
//通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean ,当然也可以用setter 方法进行注入。
public void save(Person person){
personDao.save(person);
}
}
所谓依赖注入就是指: 在运行旗舰,由外部容器动态的将依赖对象注入倒组件中。
使用spring 时,我们可以使用容器提供众多的服务。例如: 事物管理服务,消息服务等等。另外使用spring,我们也不需要处理复杂的事物传播行为。
容器提供单利模式支持,开发人员不需要自己编写实现代码。
容器提供了AOP技术。容易实现权限拦截、运行期监控等功能。
众多的辅佐类。
提供了集成支持。SSH .
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" />
<bean id="personService2" class="cn.itcast.service.impl.PersonServiceBeanFactory"
factory-method="createPersonServiceBean" />
<bean id="personServiceFactory" class="cn.itcast.service.impl.PersonServiceBeanFactory"/>
<bean id="personService3" factory-bean="personServiceFactory" factory-method="createPersonServiceBean2" />
Bean的作用域
singleton
在每個Spring loC 容器中一個bean 定義衹有一個對象是咧,默認情況下會在容器啓動時初始化bean。但是可以在節點加入lazy-init="true" 來初始化bean,這時候,衹有第一次獲取bean 才會初始化bean.
如果想讓所有bean 都應用延遲初始化,可以在根節點beans設置default-init=true.
<beans default-lazy-init="true">
.prototype
每次從容器中獲取bean 都是新的對象。
request
session
global session
集合可用以下集中
<property name="sets">
<set>
<value>第一个</value>
<value>第二个</value>
<value>第三个</value>
</set>
</property>
<property name="lists">
<list>
<value> one list</value>
<value> two lists</value>
<value> three lists</value>
</list>
</property>
<property name="properties">
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
<prop key="key3">value3</prop>
</props>
</property>
<property name="maps">
<map>
<entry key="key-1" value="value-1"></entry>
<entry key="key-2" value="value-2"> </entry>
<entry key="key-3" value="value-3"></entry>
</map>
</property>
使用 构造器方式进行注入;
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"
lazy-init="false">
<constructor-arg index="0" type="cn.itcast.dao.impl.PersonDao" ref="personDao"/>
<constructor-arg index="1" value="呵呵呵呵"/>
<!--<property name="personDao">
<bean class="cn.itcast.dao.impl.PersonDaoBean"/>
</property>-->
</bean>
重点内容