Spring学习总结(一)

Spring学习总结(一)

Spring概述

Spring 是一个开源免费并且高度灵活的轻量级框架。为了解决企业应用开发的复杂性而创建。可以一站式构建企业级应用。

Spring 再当前的j2ee项目中应用相当广泛,采用Java语言开发。

Spring 被设计为非侵入式的,意味着我们开发者的逻辑代码通常不会依赖于框架本身。也就是说依赖于Spring 的的依赖可以从代码库中分离出来。

 

开发者使用Spring 的好处

1.Spring 容器提供了IOC机制(DI),可以创建对象以及管理对象之间的调用关系,避免了硬编码造成的程序耦合。

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

3.Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于Spring 的 API

4.Spring 本身是一个容器, 它包含并且管理应用对象的生命周期

5.对于其他优秀框架的支持(如:Struts、Hibernate、MyBatis、Quartz等)

6.Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC

 

Spring 功能模块划分

 

 

 

Spring 开发环境搭建

依赖jar包

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>4.3.18.RELEASE</version>

</dependency>

 

创建配置文件

applicationContext.xml

Spring 开发

创建bean

配置bean

创建Spring IOC 容器对象

  ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");

从IOC容器中获取bean 的实例 act.getBean(“XXX”);

使用bean

 

bean管理

IOC 控制反转

IOC(Inversion of Control)和DI(Dependency Injection)的区别

当一个Java实例需要另一个实例时不需要自己创建,由spring容器创建然后

注入调用者

依赖注入实现了组件之间的解耦

 

Spring 核心容器

核心容器是spring框架的核心,用户编写的程序文件发布到服务器后,由spring

负责管理,包含对象的初始化、函数的调用、对象的消亡等等,因此可以将

spring看作是服务器与应用程序的中间管理组件。

    Spring的核心容器可以管理任何java类,容器可以初始化该类,并返回实例。

• 在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用。

• Spring提供了多种初始化容器的方式,其中最常见的是如下两种:

• BeanFactory:早期的javabean工厂类实现,面向Spring本身。

• ApplicationContext:对BeanFactory扩展,提供了更多功能,面向开发者。例如:国际化处

理、事件传递、Bean自动装配等

ApplicationContext 在初始化上下文时就实例化所有单例的 Bean。

 

Bean 的实例化

构造器方式

 <bean id="dog" class="com.ry.domain.Dog">

        <constructor-arg index="0" value="旺财"></constructor-arg>

        <constructor-arg index="1" value="2"></constructor-arg>

</bean>

<bean id="dog" class="com.ry.domain.Dog">

        <constructor-arg type="java.lang.String" value="旺财"></constructor-arg>

        <constructor-arg type="int" value="2"></constructor-arg>

    </bean>

 <bean id="dog" class="com.ry.domain.Dog">

        <constructor-arg name="name" value="旺财"></constructor-arg>

        <constructor-arg name="age" value="2"></constructor-arg>

    </bean>

 

静态工厂模式

 创建工厂类

 public class Factory{

    public static Dog getDog(){

        return new Dog("旺财",2);

    }

}

 配置静态工厂bean

 <bean id="dog" class="com.ry.domain.Factory" factory-method="getDog"></bean>

 

普通工厂模式

 创建工厂类

public class Factory{

    public  Dog getDog(){

        return new Dog("旺财",2);

    }

}

 配置普通工厂

<bean id="dog" class="com.ry.domain.Dog" factory-bean="factory" factory-method="getDog"></bean>

<bean id="factory" class="com.ry.domain.Factory" ></bean>

 

 

Bean 的属性注入

  三种依赖注入属性的方式

 构造器

 Setter注入

工厂方法(很少使用,不推荐)

 

Setter注入

<bean id="dog" class="com.ry.domain.Dog">

        <property name="name" value="旺财"></property>

        <property name="age" value="2"></property>

        <!-组件类型注入->

        <property name="persion" ref=”persion”></property>

</bean>

集合类型注入list set(类似list)

public class MyList {

    private List<String> myList;

//省略getter setter

}

配置list

<bean id="myList" class="com.ry.domain.MyList">

        <property name="myList">

            <list>

                <value>张三</value>

                <value>李四</value>

                <value>王五</value>

            </list>

        </property>

    </bean>

配置map

<map>

                <entry key= "name" value="张三丰"></entry>

                <entry key="age" value= "23"></entry>

            </map>

集合类型注入 (类似map)

<props>

                <prop key="ip">192.168.0.1</prop>

                <prop key="user">icer</prop>

                <prop key= "pwd">icer111</prop>

            </props>

Bean 注入自动装配(不推荐使用)

<bean  id="dog" class="com.ry.domain.Dog" autowire="byType"></bean>

<bean  id="dog" class="com.ry.domain.Dog" autowire="byName"></bean>

<bean  id="dog" class="com.ry.domain.Dog" autowire="constructor"></bean>

 

Bean 的配置关系继承

将多个Bean相同的部分抽象为一个Bean,然后让这多个Bean继承它

<bean id="person" class="com.tjxz.spdemo.bean.Person">

        <property name="name" value="格格巫"></property>

    </bean>

    <bean id="owner" abstract="true"> <!--抽象出来的bean并未指定class。 -->

        <property name="person" ref="person"></property>

    </bean>

    <bean id="dog" class="com.tjxz.spdemo.bean.Dog" parent="onwer">

        <property name="name" value="旺财"></property>

    </bean>

    <bean id="cat" class="com.tjxz.spdemo.bean.Cat" parent="onwer">

        <property name="name" value="阿兹猫"></property>

    </bean>

父Bean可以作为配置模板,也可以作为Bean实例。不过,如果只想把父Bean作

为不实例化的模板,那么必须把abstract属性设为true,这样spring将不会实

例化这个Bean

并不是所有在父<bean>元素里定义的属性都会被继承。例如,autowire和

dependency-check属性就不能被继承

Bean配置的继承不是类的继承,它们之间没有任何关系

 

Bean的懒加载和依赖

  依赖

• Spring 允许用户通过 depends-on 属性设定 Bean 前置依赖的Bean,前置依赖的 Bean 会在本 Bean 实例化之前创建好。

• 如果前置依赖于多个 Bean,则可以通过逗号,空格或的方式配置 Bean 的名称。

懒加载

• 延迟初始化Bean(惰性初始化Bean)是指不提前初始化Bean,而是只有在真正使用时才创建初始化Bean.

• 配置方式很简单只需在<bean>标签上指定 “lazy-init” 属性值为“true

”即可延迟初始化Bean

 

Bean的作用域和生命周期

 作用域 singleton【默认】、prototype、request、session、globalsession

Singleton 单例模式,整个Spring IOC容器中只有这一个指定bean实例

Prototype 原型模式,每getbean都会new一个新的实例。

 生命周期

        singleton作用域的Bean,容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;

        如果一个Bean被设置成prototype作用域,旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

        原型模式弊端之一:Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。

Bean的销毁

• 通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;

• 通过<bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的

操作方法;

• 在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值