spring作用、spring注解、管理对象的作用域与生命周期、自动装配、Spring的框架包有哪些作用是什么
Spring
1. 作用
创建和管理对象,使得开发过程中,可以不必使用new关键字创建对象,而是直接获取对象!并且,还可以通过一些配置,使得某些获取到的对象,其中某些属性已经是被赋值的!
2. Spring注解
在Spring中,定义了一系列的注解,可以取代几乎所有的XML配置!
尽管使用注解可以完成此前的许多配置,但是,基于Spring的项目仍需要Spring的配置文件!
2.1. 常用注解
使用注解的方式来创建和管理对象,首先,必须在Spring的配置文件中添加组件扫描:
<!-- 组件扫描 -->
<!-- 仅在组件扫描的包下的类,才会被Spring管理 -->
<!-- 某个类,如果在扫描范围中,且添加了注解,则会被Spring管理 -->
<!-- base-package:扫描的根包 -->
<!-- 根包:父级包,Spring扫描时,会扫描其各层级子包 -->
<!-- 当配置为cn.tedu.spring时 -->
<!-- cn.tedu.spring.dao或cn.tedu.spring.entity这些子包都会被扫描 -->
<context:component-scan
base-package="cn.tedu.spring.entity" />
然后,确保需要被管理的类都在以上配置的包中(也可以在其子包中),并且,在类的声明之前添加注解:
@Component
在默认情况下,被管理的类的bean id是与类的名称相同,且首字母小写的!例如类名是User,则默认的bean id是user,或类名是UserDao,则默认的bean id是userDao。
如果需要自定义bean id,可以在注解中添加bean id:
@Component("bean-id")
与@Component作用相同的注解还有:
@Controller
@Service
@Repository
其中,@Component是通用注解,即对任意类都可以添加该注解,@Controller是对控件器类的注解,@Service是对业务类的注解,@Repository是对持久层类的注解。
不过,以上这4种的作用和使用方式完全相同!只是语义不同,即从语法上表达的意义不相同,应该根据类的定位来选取 其中的某个注解!
2.2. 【了解】管理对象的作用域与生命周期
由Spring所管理的对象,默认都是饿汉式单例的,通过@Scope注解可以配置某个类被Spring管理时,是否是单例的:
@Scope("prototype")
public class ...
常用的配置方式有@Scope("singleton")和@Scope("prototype")。
如果需要配置该类最终是否是懒加载的,可以使用@Lazy注解,当添加了该注解后,就是懒加载模式,即:只有第1次获取对象时,才会创建对象,而在加载Spring配置文件的过程中,并不会把对象创建出来!
关于@Lazy也可以配置值,例如@Lazy(true)或@Lazy(false)。
饿汉式:一开始就已准备好了,随时都有的吃!
懒汉式:不到逼不得已,不干活!
注意:是否懒加载,是建立在单例的基础之上的!如果不是单例的,则懒加载的配置是无效的!
作用域:在多大的范围内是有效的!对于变量/对象而言,作用域就是它存在的时长,即何时创建及何时销毁!由于单例的对象都是static实现的,也就涉及创建时间和销毁时间的问题!而非单例的,作用域与普通的局部变量相同!
简单的懒汉式单例代码(没有解决线程安全问题):
public class King {
private static King king = null;
private King() {
}
public static King getInstance() {
if (king == null) {
king = new King();
}
return king;
}
}
由Spring管理的对象,也存在生命周期问题,毕竟单例模式的类的对象何时创建、何时销毁,是我们无法确定的!为了确保初始化和销毁工作的正常执行,Spring允许在类中自定义初始化方法和销毁方法,使用了@PostConstruct注解的方法是生命周期初始化方法,会在构造方法之后被自动调用,使用了@PreDestroy注解的方法是生命周期销毁方法,会在Spring容器销毁并释放资源的前一刻被自动调用。
注意:以上2个方法是在javax包中定义的,使用之前,需要为项目添加Tomcat运行环境,否则无法识别!
注意:以上生命周期方法是建立在单例模式之下的,对于非单例模式而言,以上生命周期方法其实没有意义!
2.3. 自动装配
当使用了自动装配后,由Spring管理的对象时,会自动尝试为各属性注入值,值的来源可以是其它bean,例如:
public class UserService {
public IUserDao userDao;
}
public class UserDao1 implements IUserDao {
}
如果以上2个类都是由Spring管理的,则在创建UserService对象时,会尝试自动的将UserDao对象作为其属性值!
自动装配的常用模式有byName和byType,前者表示根据名称来装配,即:要求bean id与属性名保持一致,后者表示根据类型来装配,即bean的类型与属性的类型保持一致(允许是接口与实现类的关系,也允许是父子级继承的关系),不过,根据类型装配,要求匹配该类型的对象必须是有且仅有1个,如果有2个,则会抛出异常,无法装配!
Spring框架包,分别有哪些作用
Spring-context,上下文,用于缓存,注解,远程调用等

Spring-aop,用于配置面向切面编程,如配置事务的切面,日志切面
Spring-tx,用于配置事务
Spring-web,用于配置在web-xml加载applicationContext配置文件
Spring-mvc,拦截请求,配置控制器
\图片1.png)
spring作用、spring注解、管理对象的作用域与生命周期、自动装配、Spring的框架包有哪些作用是什么的更多相关文章
- Spring(二)-生命周期 + 自动装配(xml) +自动装配(注解)
1.生命周期 **Spring容器的 bean **的生命周期: 1.1 默认生命周期 1.1.1 生命周期 调用构造方法,创建实例对象: set方法,给实例对象赋值: init 初始化方法 初始化对 ...
- 【Spring】Spring中的Bean - 4、Bean的生命周期
Bean的生命周期 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 了解Spring中Bean的生命周期有何意义? 了解Sp ...
- Spring中bean的作用域与生命周期
在 Spring 中,那些组成应用程序的主体及由 Spring IOC 容器所管理的对象,被称之为 bean.简单地讲,bean 就是由 IOC 容器初始化.装配及管理的对象,除此之外,bean 就与 ...
- Spring中Bean的作用域、生命周期
Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...
- Spring之Bean的作用域与生命周期
在前面博客中提到容器启动获得BeanDefinition对象中有一个scope 属性.该属性控制着bean对象的作用域.本章节介绍Bean的作用域及生命周期,了解bean是怎么来的又怎么没的. 一.B ...
- Spring中Bean的作用域和生命周期
作用域的种类 Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域.Spring3 为 Bean 定义了五种作用域,具体如下. 1)singleton 单例模式,使用 sing ...
- 详解Spring中Bean的作用域与生命周期
摘要:在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我 ...
- Spring 高级特性之二:Processor——Bean生命周期关键触发时机
任何对象都有生命周期,那么Spring Bean对象创建.管理.销毁的整个生命周期个关键触发时机如何体现呢?先说结论,后续案例验证结论. 根据上图可知,实际bean对象涉及生命周期的主要是一个构造器和 ...
- Spring 使用介绍(十三)—— Bean的生命周期
一.概述 Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,生命周期时序图如下: 二.生命周期接口分类 Bean的生命周期经历了多个接口方法的调用, ...
随机推荐
- DCL,即Double Check Lock,中卫双重检查锁定。
DCL,即Double Check Lock,中卫双重检查锁定. [Java并发编程]之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码) 关于单例.关于DCL: ...
- 关于MySQL连接抛出Authentication Failed错误分析
[问题描述] 在应用端,偶尔看到有如下报错: Authentication to host 'xxxx' for user 'yyyy' using method 'mysql_native_pass ...
- JavaScript里的Date 对象属性及对象方法--实现简单的日历
上网搜索"js 日历插件"就会出来各种效果的功能丰富的日历插件,很多都可以下载源码,然后根据各自的需求对源码进行修改就可以直接用了. 但今天讲的不是如何使用这些插件,而是讲如何实现 ...
- 【BZOJ1859】【ZJOI2006】碗的叠放
题目大意:给你n个碗,求如何堆叠,使得它们的总高度最低. 首先,我们枚举碗的叠放顺序. 假设我们已经堆好了前i个碗,那么在堆第i+1个碗时,我们要将第i+1个碗与前i个碗比较,确定第i+1个碗的离地高 ...
- Swift 使用 #warning
swift 中没法使用#Warning来提示警告, 可以通过给TODO: FIXME:加上警告, 实现类似的效果. Build Phases ---> Run Script ---> ad ...
- (转)关于IBM小机P520的面板使用
原文:http://www.xlgps.com/article/390810.html 经过搜索资料及自己的试验,现将解决方法记录如下.P520控制面板上有三个按钮,按钮上方有一个显示屏,上面显示你操 ...
- 渐进增强与优雅降级 && css3中普通属性和前缀属性的书写顺序
什么是渐进增强与优雅降级? 服务器和浏览器是不同的.当服务器有新版本时,开发人员直接使用新版本的服务器提供服务即可:但是浏览器端,不同的用户使用的浏览器版本不同,型号差异大,我们不可能让用户强制更新 ...
- 四、CLR执行程序集中代码和IL代码简介
三.加载公共语言运行时中介绍了在安装了.Net Framework中加载公共语言运行时,公共语言运行时加载程序集的过程.以及通过vs stdio设置源码编译的目标平台的过程. 本问主要介绍公共语言加载 ...
- Android studio 获取每次编译apk时的日期
项目中需要获取apk的编译日期,首先肯定是用手动的方式获取,但这样容易遗忘,怎么样通过代码的方式获取呢? 其实android 为我们提供了一个BuildConfig的类,android 每次编译的时候 ...
- Chapter 3 Phenomenon——9
"You were over there," I suddenly remembered, and his chuckle stopped short. “你之前不在这里”我突然记 ...