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