1、Spring简介
1)Spring是一个开源的轻量级应用开发框架,其目的是用于简化企业应用程序的开发,降低侵入性
2)Spring提供的IOC和AOP功能,可以将组件之间的耦合度降至最低,即解耦;便于系统的升级和维护
3)Spring的本质是管理软件中的对象,即创建对象和维护对象之间的关系
2、Spring容器
1)在Spring中,任何组件都可以当成Bean处理,通过容器管理
2)Spring容器有BeanFactory和ApplicationContext两种类型
3)Spring容器的实例化
ApplicationContext继承自BeanFactory接口,拥有更多的企业级开发方法(推荐)
加载工程classpath下的配置文件实例化
String xml="配置文件路径";
ApplicationContext ac=new ClassPathXmlApplicationContext(xml);
4)Spring容器的使用
1)首先在容器的配置文件spring.xml中添加Bean组件定义(Bean组件的类型即为包名如:com.entity.User)
<bean id="标识符" class="Bean组件的类型"></Bean>
2)然后在创建容器对象后,调用getBean方法获取Bean组件实例
getBean("标识符");
3)结合起来案例
ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
User user=ac.getBean("User",User.class);
注:Spring容器默认调用无参构造器来实例化
3、Bean作用域
Spring容器在实例化Bean时,可以创建以下作用域的Bean对象
1)singleton
在Spring容器中一个Bean定义对应一个实例对象,默认项
2)prototype
一个Bean定义对应多个实例对象
3)request
在一次HTTP请求中,一个Bean定义对应一个实例对象
4)session
在一次HTTP Session中,一个Bean定义对应一个实例对象
注:Bean的作用域可以通过<bean>定义的scope属性指定
<!--Bean的作用域-->
<bean id="userOne" scope="singleton" class="com.entity.User"/>
4、Bean的生命周期
1)指定初始化回调方法
<bean init-method=""/>
2)指定销毁回调方法,仅适用于singleton模式的Bean
<bean destroy-method=""/>
在<beans>标签中通过default-init-method属性,可以为容器中的<bean>指定初始化回调方法,也可以通过default-destroy-method属性为容器中的<bean>指定销毁回调方法
<!--Bean的生命周期-->
<bean id="exampleBean" class="com.entity.ExampleBean" init-method="init" destroy-mothod="destroy" scope="prototype"/>
5、Bean的延迟实例化
默认行为是在容器实例化的同时将单行模式的Bean提前进行实例化
延迟实例化操作:
在<bean>生命时指定其属性lazy-init为true,一个延迟实例化的Bean将在第一次被用到时实例化
注意:仅适用于单例模式
在<beans>标签中通过default-lazy-init属性,可以为容器中的<bean>指定延迟实例化的特性
<!--bean的延迟实例化-->
<bean id="example" class="com.entity.ExampleBean" lazy-init="true"/>
6、基于注解的组件扫描
1)什么是组件扫描
指定一个包路径,Spring会自动扫描此包及其子包中的组件类,当发现组件类定义前有特定的注解标记时,就将此组件类纳入到Spring容器中管理,等价于原有的XML配置中的<bean>定义
组件扫描可以替代大量XML配置的<bean>定义
指定扫描类路径,使用组件扫描,首先需要在XML配置文件中指定扫描父级package路径
<context:component-scan base-package="指定扫描包路径"/>
容器会自动扫描指定包及其子包下所有的组件类,如果此组件类定义前有特定
的注解标记,则会将此组件类实例化为Bean对象
2)自动扫描的注解标记
@Component:通用注解
@Repository:持久层组件注解
@Service:业务层组件注解
@Controller:控制层组件注解
3)自动扫描组件的命名
当一个组件在扫描过程中被检测到时,会生成一个默认的ID值,默认ID值为小写开头的组件名,也可以在注解标记中自定义ID值
4)指定组件的作用域
@Scope注解可以指定作用域,只需要在注解中提供作用域的名称即可
5)指定初始化和销毁回调方法
@PostConstruct和@PreDestroy注解分别用于指定初始化和销毁回调方法