Spring的用法(详解)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44296929/article/details/102474630
1.Spring

(1)Spring是什么?

是一个轻量级的Java SE(Java 标准版本)/Java EE(Java 企业版本)的开发框架,其目的是用来简化企业级应用程序开发。

-Spring的优点:

a. 简化开发: Spring对常用的api做了简化,比如,使用Spring jdbc来访问数据库,就不用再考虑如何获取链接、关闭链接、处理异常等等。
b. 解耦: Spring容器(Spring框架的一个模块)帮我们管理对象(包括对象的创建及对象之间的依赖关系),这样一来,对象之间的耦合度会大大降低,提供高了系统的维护性。
c. 集成其它框架: Spring可以将其它一些常用框架集成进来,比如可以将Quartz,MyBatis等集成进来。

d. Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力。

(2)Spring容器

1)Spring容器是什么?
Spring框架的一个核心模块,用于管理对象。
注:管理对象指的是,Spring容器会帮我们创建对象,并且建立对象之间的依赖关系。

2)如何启动Spring容器?
step1.导包。

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>3.2.8.RELEASE</version>
</dependency>

step2.添加配置文件applicationContext.xml(文件名称可以自己定义)将配置文件添加到src\resources下。
step3.启动Spring容器。

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

3)创建对象
a.方式一:使用无参构造器创建对象
step1. 给类添加无参构造器(缺省构造器)。
step2. 在配置文件当中,使用bean元素来进行配置。
注:在Spirng框架当中,将Spring容器所管理的对象称之为一个bean(容器管理对象)。
1、使用无参构造器创建对象 id 要求唯一。
2、class属性指定类名(要写完整的类名first.Apple)。

目录结构
step3. 启动容器,调用容器提供的getBean方法。
至此我们已经获取到对象了,而不需要使用new关键字,好,我们现在按照上面的步骤来创建一个对象:
step1. 创建一个类Apple并添加一个无参构造器

package first;

public class Apple {
	public Apple(){
		System.out.println("我是Apple()的无参构造");
	}
}

step2. 然后在src\resources下的配置文件中添加配置(我们这里同时也可以创建一个java提供给我们的Date对象)
在这里插入图片描述
在这里插入图片描述
step3. 最后,我们启动Spring容器,调用getBean方法创建对象

/* 
* 启动Spring容器:
* ApplicationContext是一个接口,定义Spring容器需要提供的方法;
* ClassPathXmlApplicationContext是一个实现了ApplicationContext接口的一个类,
* 该类会依据类路径去查找配置文件,然后启动Spring;
*/
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器获得对象
Apple ap1=ac.getBean("ap1",Apple.class);	//得到Apple对象
Date date=ac.getBean("date1",Date.class);	//得到Date对象(java提供的无需我们自己创建实体类)

ok!上面我们通过无参构造器的方法获取到了对象,下面我们看一下第二种方法。

b.方式二:使用静态工厂的方法(了解)
注:使用静态工厂的方法创建对象
factory-method属性用于指定一个静态方法(static修饰的方法),容器会调用指定的方法来创建对象。
(这里的id属性和Spring提供的getBean方法的第一个参数是对应的)。

例:比如我们想创建一个Calendar的对象。
1、在src\resources下的配置文件中添加配置。

<bean id="cal1" class="java.util.Calendar" factory-method="getInstance"/>

2、启动Spring容器,通过静态工厂的方式来创建Calendar对象。

ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
Calendar cal1=ac.getBean("cal1",Calendar.class);	//得到Calendar对象

下面我们来看一下第三种创建对象的方式

c.方式三:使用实例工厂方法(了解)
注:使用实例工厂方法来创建对象
1、factory-bean属性指定bean的id
2、factory-method属性指定一个方法
(容器会调用该bean的方法来创建一个对象)

例:比如我们想使用之前配置好的Calendar的bean来创建一个Date对象。
step1、首先我们在src\resources中配置一下bean

//下面就是使用Calendar的对象的getTime方法来获取Date对象
//factory-bean指定之前配置好的Calendar的bean-id来获取Calendar对象,然后调用factory-method配置的getTime方法来获取Date对象
<bean id="date2" factory-bean="cal1" factory-method="getTime"/>

step2、使用实例工厂的方法来创建对象。

ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
Date date2=ac.getBean("date2",Date.class);	//创建一个Date对象

4)作用域
a、默认情况下,对于某个bean,容器只会创建一个实例。
b、如果要让容器创建多个实例,需要设置bean的作用域。
注:scope属性用于指定作用域,缺省值是singleton(单例),如果将值设置位prototype,则同期会创建多个实例。

<bean id="ap1" class="first.Apple" scope="prototype"/>	

5)生命周期
Spring容器在创建好对象之后,会调用初始化方法,在销毁对象之前,会调用销毁方法。
注:init-method属性:指定初始化方法。
destroy-method属性:指定销毁方法。(销毁方法只有当作用域为singleton才有效)

<bean id="ap1" class="first.Apple" init-method="init" destroymethod="destroy" scope="singleton"/>	

6)延迟加载
a、默认情况下,容器启动之后,会将所有的作用域为singleton的bean实例化。
b、延迟加载指的是,通过设置lazy-init="true"告诉容器,启动之后不再创建其实例。

//lazy-init属性如果值为true,表示延迟加载。
<bean id="lb1" class="basic.LazyBean" lazy-init="true"/>

如果文章对你有一点帮助,请给个赞吧,谢谢你!


下一篇:spring的IOC和DI

猜你喜欢

转载自blog.csdn.net/weixin_44296929/article/details/102474630