spring学习之第一篇

Spring是一个开源的控制反转和面向切面的容器框架,它的主要目的是简化企业开发。

使用Spring的好处:
1,降低组件之间的耦合度,实现软件各层之间的解耦。

2,可以使用容器提供的 众多服务。如:事务管理服务,消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需要处理复杂的事务传播。

3,容器提供单例模式支持,开发人员不再需要自己编写实现代码。

4,容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能。

5,容器提供的众多辅助类,使用这些类能够加快应用的开发,如:JdbcTemplate,HibernateTemplate。

6,Spring对应主流的应用框架提供了集成支持,如;集成Hibernate,JPA,Struts等,这样更便于应用的开发。

轻量级和重量级概念的划分:

划分一个应用是否属于轻量级还是重量级,主要看它使用了多少服务。使用的服务越多,容器要为普通java对象做的工作就越多,必然会影响到应用的发布时间或者是运行性能。

对于Spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务,如果应用使用的服务很少,如:只使用了spring核心服务,那么我们可以认为此时应用属于轻量级的,如果应用使用了spring提供的大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认为应用提供了EJB规范中所有的功能,所以它属于重量级。


实例化spring容器常用的两种方式:

方法一:
在类路径下寻找配置文件来实例化容器

ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml");

方法二:
在文件系统路径下寻找配置文件来实例化容器

ApplicationContext ctx = new FileSystemXmlApplicationContext("d:\\beans.xml");

模拟spring对bean的管理程序:

1,创建解析xml并生成bean对象的类。解析xml文件,使用dom4j解析xml文档,获取配置的bean信息,将id和className构造成一个beanInfo对象保存到list中去。

2,然后,通过该list中的beanInfo对象,以id为键,以className利用反射机制new出的bean对象作为值,保存到一个map中去。

3,在测试程序中,调用该解析类。在解析类中也有getBean方法,只是简单的从map中根据键取值而已。

所谓依赖注是指:在运行期,有外部容器动态将依赖对象注入到组件中。

三种实例化bean的方式:
1,使用类构造器实例化
<bean id="orderService" class="cn.itcast.OrderServiceBean"/>

2,使用静态工厂方法实例化
<bean id="personService" class="cn.itcast.service.OrderFactory" factory-method="createOrder"/>

public class OrderFactory{
        public static OrderServiceBean createOrder(){
                return new OrderServiceBean();
        }
}

3,使用实例化工厂方法实例化
<bean id="personServiceFactory" class="cn.itcast.service.OrderFactory"/>
<bean id="personService" factory-bean="personServiceFactory" factory-method="createOrder"/>

public class OrderFactory{
        public OrderServiceBean createOrder(){
                return new OrderService();
        }
}


bean的作用域:
.singleton
在每个spring IOC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init="true"来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如:

<bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true" />

如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-inti="true",如下:

<beans default-lazy-init="true"...>

.prototype
每次从容器获取bean都是新的对象。

<bean id="orderService" class="cn.itcast.OrderServiceBean" scope="prototype" />

指定bean的初始化方法和销毁方法

<bean id="xxx" class="cn.itcast.OrderServiceBean" init-method="init" destroy-method="close"/>


注入依赖对象:
基本类型对象注入:
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
        <constructor-arg index="0" type="java.lang.String" value="xxx"/>构造器注入
        <property name="name" value="zhao"/>//属性setter方法注入
</bean>

注入其他bean:
方式一:
<bean id="orderDAO" class="cn.itcast.service.OrderDaoBean"/>
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
        <property name="orderDao" ref="orderDao"/>
</bean>

方式二(使用内部bean,但该bean不能被其他bean使用)
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
        <property name="orderDao">
                <bean class="cn.itcast.service.OrderDaoBean"/>
        </property>
</bean>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值