Spring初识

Spring是一个开源的控制反转(Inversion of Control)和面向切面(AOP)的的容器框架,目的是简化企业开发。

public PresonServiceBean{
    private PersonDao personDao = new PersonDaoBean();
    public void save(Person person){
      personDao.save(person);
    }
}

上面代码可以看出,PersonDaoBean是在应用内部创建及维护的,IOC即为应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护是由外部容器(Spring或其他Framework)负责的,这样控制权由应用交给了外部容器,即为控制反转。

依赖注入(Dependency Injection):在运行期,有外部容器动态地将依赖对象注入到组件中

当把依赖对象交给外部容器负责创建,则PersonServiceBean类可以改写成以下方式

public PersonServiceBean{
    private PersonDao personDao;
//通过构造器参数,让容器把创建好的依赖对象注入进PersonServicebean,也可以使用Setter方法
    public PersonServiceBean(PersonDao personDao){
    this.personDao=personDao;
    }
    public void save(Person person){
        personDao.save(person);
    }
}

使用Spring的优势:
1.解耦合,实现分层解耦:Controller–Service–Dao(在原来的代码中服务层 PresonServiceBean类中直接使用了Dao层的对象,两层之间是紧密耦合的)
2.可以使用Spring提供的众多服务:事务管理服务,持久化服务,JMS服务

//使用Spring事务管理服务则不需要手动控制事务也不需处理复杂的事务传播,即beginTransaction和commit这两行代码可省略
public void testSave() throws Exception {
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        for (int i = 1; i <= 20; i++) {
            User user = new User();
            user.setName("aaa_" + i);
            user.setAddress("bbb_" + i);
            session.save(user);
        }
        session.beginTransaction().commit();
        session.close();
    }

3.容器可以实现单例模式支持,开发人员不需要自己编写实现代码
4.提供了AOP技术,很容易实现权限拦截、运行期监控等
5.提供了很多辅作类,使用这些类可以加快开发,如JDBC Template(对JDBC进行了封装)、Hibernate Template
6.Spring对于主流的应用框架提供了集成支持,集成hibernate、JPA、Struts2等,便于应用开发

轻量级和重量级框架:
区分:看他使用了多少服务,使用服务越多,容器要为普通的java对象做的工作越多,会影响发布时间或运行性能
在Spring中,提供了多种服务,但默认不是打开的,应用需要使用某种服务,就需要指明使用该服务,如果只使用Spring的核心服务,则Spring为轻量级,若使用Spring提供的大部分服务,则为重量级;在EJB中,默认为应用提供了EJB规范中的所有功能,即为重量级。

环境搭建–实例化Spring容器(两种方式)
1.在类路径下寻找配置文件来实例化容器
2.在文件系统路径下寻找配置文件来实例化容器(不常用,系统文件路径不同)
Spring的配置文件可指定多个,可通过String数组传入

Spring实例化bean的三种方式: 推荐使用第一种方式,配置简单
1.使用类构造器实例化

<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">

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 OrderServiceBean();
    }
}

配置bean的作用域:
1.默认情况下bean交给Spring管理后,是单实例的

@Test
    public void instanceSpring() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        PersonService personService1 = (PersonService)ctx.getBean("personService");
        PersonService personService2 = (PersonService)ctx.getBean("personService");
//      personService.save();
        System.out.println(personService1==personService2);
//输出为true代表引用的是同一个对象

} 

2 .singleton:
在每个Spring IOC容器中一个bean定义只有一个对象实例。默认情况下,在容器启动时初始化bean,但可指定bean节点中lazy-init=“true”来延迟初始化bean;这时候只有第一次获取bean时才会初始化bean,如:

<bean id ="xxx" class="yyy" lazy-init="true"/>

如果想对所有bean都是用延迟初始化,可以在根节点beans中设置default-lazy-init=“true”

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

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

<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype">

管理bean的生命周期:
使用lazy-init=”true”来控制bean初始化–true为延迟初始化

引用一篇文章(侵删):Bean的生命周期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值