【SSM - Spring篇01】spring详细概述,Spring体系结构,bean、property属性,Spring生命周期方法
文章目录
- 1. Spring介绍
- 2. Spring体系架构
- 2.1 Spring核心容器(Core Container)
- 2.2 数据访问/集成(Data Access/Integration)
- 2.3 web
- 2.4 Test测试
- 2.5 AOP和Aspects
- 3. 核心配置文件applicationContext.xml模板
- 3.1 bean标签
- 3.2 property属性 - 给成员变量赋值(调用set方法注入)
- 3.3 constructor-arg给成员变量赋值(调用构造方法注入)
- 3.4 通过value可以对基本数据类型和String进行赋值,其他对象类型,需要用ref来赋值。
- 4. Spring生命周期
1. Spring介绍
Spring是一个轻量级Java 开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。
它是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP) 的容器框架
Spring的思想基础就是面向Bean的编程(BOP,Bean Oriented Programming)
特点:提供了以下内容
- 展现层 SpringMVC
- 持久层 Spring JDBC
- 课可以整合开源世界众多著名的第三方框架和类库
- 业务层事务管理 AOP
- 方便解耦,简化开发的IOC
2. Spring体系架构
2.1 Spring核心容器(Core Container)
Spring核心容器主要是由Beans、Core、Context、SpEL组成,就是用于装载就是用于装Java Bean对象。
- Core模块:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)功能。
- Beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。解决Bean的定义、Bean的创建、对Bean的解析。我们只需要关注Bean的创建,其他两个由Spring内部完成,对使用来说是 透明的。
- Context 模块:建立在Core和Beans模块基础上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。
- SpEL(expression)模块:提供了强大的表达式语言去支持运行时查询和操作对象图。(类似于jsp上使用EL表达式,只不过这个表达式用在spring的配置文件里)
- 其中Core、Beans和Context构成了Spring的骨架,Context建立在Core模块和Beans模块的基础之上,提供了框架式访问对象的方式。
2.2 数据访问/集成(Data Access/Integration)
数据访问/集成层由JDBC、ORM、OXM、JMS和事务模块组成,用于访问操作我们的数据库。支持持久层的操作。自带jdbcTemplate对数据库操作,推荐使用mybatis。
- Spring-jdbc模块:提供了一个JDBC 的抽象层,消除了繁琐的JDBC编码和数据库厂商特有的错误代码解析。
- Spring-tx模块(事务模块):支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理。
- Spring-orm模块:为流行的对象关系映射(Object-Relational Mapping )API提供集成层,包括JPA和Hibernate。使用Spring-orm模块,可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,例如声明式事务管理功能。
- Spring-oxm模块:提供了一个支持对象/XML映射的抽象层实现,如JAXB、Castor、JiBX和XStream。
- Spring-jms模块(Java Messaging Service) :指Java消息传递服务,包含用于生产和使用消息的功能。自Spring 4.1后,提供了与Spring-messaging模块的集成。
Transactions:用于支持事物处理。用于解决业务层的事物处理问题。 编程式事务管理和声明式事务管理.
2.3 web
Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成。用于支持数据展示层,支持http请求。
- Spring-web模块:提供了基本的Web开发集成功能。例如:多文件上传功能、使用Servlet监听器初始化一个IoC容器以及Web应用上下文。
- Spring-webmvc模块:也称为Web-Servlet模块,包含用于Web应用程序的Spring MVC和REST Web Services实现。 Spring MVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成。
- Spring-websocket模块:Spring 4.0后新增的模块,它提供了WebSocket和SockJS的实现。
- Portlet模块:类似于Servlet模块的功能,提供了在Portlet环境中使用MVC实现。
2.4 Test测试
Spring-test模块:支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。
(写一个测试类,加注解,运行的时候,自动的将配置文件加载起来,模拟服务器的运行,用于测试使用)
2.5 AOP和Aspects
- AOP:切面编程编程【***】
Spring AOP 模块提供了符合 AOP Alliance 规范的面向方面的编程(aspect-oriented programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需 要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。
- Aspects:提供了与AspectJ的集成,AspectJ 提供了比 Spring ASP 更强大的功能。
3. 核心配置文件applicationContext.xml模板
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 要让 spring容器给我创建一个person对象-->
<!-- 配置类名,用于反向创建对象-->
<!-- 同时给一个编号方便查找--><bean id="person" class="com.xgf.bean.Person" />
</beans>
3.1 bean标签
dao、service、controller、javabean都是bean对象。
bean属性 | 描述 |
---|---|
id |
标签的唯一标识,理论上可以随便写。可以通过context.getBean("bean的id") 来获取bean对象。
|
class | 想要Spring容器创建哪个类,就写上对应的类的全路径名。 |
init-method |
当该对象初始化的时候该方法会自动执行。一般不设置或设置为init-method="init"
|
destroy-method |
当该对象即将销毁的时候会自动调用该方法。一般不设置或设置为destroy-method="destory"
|
<bean id="user" class="com.xgf.bean.User" ></bean><bean id="person6" class="com.wzx.domain.Person"init-method="init"destroy-method="destory"/>
调用bean的两种方式:
//getBean()方法就是调用配置文件bean的id来找
context.getBean("id值", 类型.class);//无需进行类型转换
context.getBean("id值");//需进行类型转换
3.2 property属性 - 给成员变量赋值(调用set方法注入)
property属性 | 描述 |
---|---|
name | 该属性对应bean的成员变量名 |
value | 该属性对应对应name的成员变量的值,可用于赋值 |
property调用set方法赋值
<bean id="user" class="com.xgf.bean.User" ><!-- 相当于user.setId(10) --><property name="id" value="10"/><!-- 相当于user.setName(rose) --><property name="name" value="rose"/><property name="age" value="20"/></bean>
property标签,找的是类的属性对应的set方法,在idea中,如果对应bean对应的set方法不存在,就会报红,提示找不到错误。(就是有对应的属性存在,但是没有对应属性的set方法,就不能通过property赋值)
3.3 constructor-arg给成员变量赋值(调用构造方法注入)
constructor-arg属性 | 描述 |
---|---|
name | 该属性对应bean的成员变量名 |
value | 该属性对应对应name的成员变量的值,可用于赋值 |
bean的constructor-arg 属性,调用bean对象的构造器进行赋值,赋值必须按照构造函数的参数赋值,不能少,用的地方很少。
<!-- 相当于User user = new User(1,"jack",20,new Date()); 调用构造器赋值--><bean id="date" class="java.util.Date"/><bean id="user" class="com.xgf.bean.User" ><constructor-arg name="id" value="10"/><constructor-arg name="name" value="hello"/><constructor-arg name="age" value="20"/><constructor-arg name="birthday" ref="date"/></bean>
3.4 通过value可以对基本数据类型和String进行赋值,其他对象类型,需要用ref来赋值。
<!-- 相当于User user = new User(1,"jack",20,new Date()); 调用构造器赋值--><bean id="date" class="java.util.Date"/><bean id="user" class="com.xgf.bean.User" ><constructor-arg name="id" value="10"/><constructor-arg name="name" value="hello"/><constructor-arg name="age" value="20"/><!-- Date数据类型通过ref来调用上面的java.util.Date的bean的id --?<constructor-arg name="birthday" ref="date"/></bean>
4. Spring生命周期
4.1 生命周期的三个方法:
- 创建方法
init()
- 销毁方法
destory()
- 普通方法
service()
4.2 两个属性:
init-method
:当该对象初始化的时候该方法会自动执行destroy-method
: 当该对象即将销毁的时候会自动调用该方法
可以通过context.close()
关闭容器,但是基本不需要进行容器的关闭。
<bean id="user" class="com.xgf.bean.User"init-method="init"destroy-method="destory"/>
public class Person{public void init(){System.out.println("哇哇...");}public void eat(){System.out.println("吃食堂...");}public void destory(){System.out.println("呜呜...");}
}
【SSM - Spring篇01】spring详细概述,Spring体系结构,bean、property属性,Spring生命周期方法相关推荐
- spring bean实现init/destory生命周期方法的三种方式
实现InitializingBean和DisposableBean接口,实现afterPropertiesSet()和destroy()方法 使用@PostConstruct和@PreDestroy进 ...
- spring Bean的初始化和销毁生命周期方法
使用注解定义Bean的初始化和销毁 Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法. 回顾配置文件的写 ...
- Spring Bean的作用域及生命周期
Bean的作用域 在bean声明时它有一个scope属性,它是用于描述bean的作用域. 可取值有: singleton:单例 代表在spring ioc容器中只有一个Bean实例 (默认的scope ...
- Spring【Bean的作用域与生命周期】
Spring[Bean的作用域与生命周期]
- session作用域_看完这篇Bean的作用域与生命周期,问到面试官不敢问-乐字节java...
Bean的作用域与生命周期 Bean的作用域 默认情况下,我们从Spring容器中拿到的对象均是单例的,对于bean的作用域类型如下: singleton 作用域 注意: lazy-init是懒加载, ...
- Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- java中bean的定义有哪些_详解Java的Spring框架中bean的定义以及生命周期
bean的定义形成应用程序的骨干是由Spring IoC容器所管理的对象称为bean.bean被实例化,组装,并通过Spring IoC容器所管理的对象.这些bean由容器提供,例如,在XML的定义, ...
- 学习Spring(六) -- Spring中Bean的作用域以及生命周期
2019独角兽企业重金招聘Python工程师标准>>> Bean的作用域 默认情况下,bean的作用域为单例模式(singleton): 在applicationContext创建时 ...
- spring bean的作用域和生命周期
一.spring bean的作用域 五种作用域:singleton.prototype.request.session.globalSession request.session和global ses ...
最新文章
- 机器人程序为啥要用Qt开发呢
- delphi中设置系统时间方法
- ARP侦查工具Netdiscover
- EasyPusher/EasyDarwin/EasyPlayer实现手机直播版本及效果整理
- linux启动mqtt_linux下安装MQTT服务器 - EMQTT
- aop判断方法是否执行成功_判断图中是否有环的三种方法
- python-turtle库-01
- mysql phpmyadmin 安装_phpmyadmin怎么安装
- linux系统下如何设置和修改文件和文件夹的读、写、执行权限
- linux下打包deb文件,制作deb包的三种方法
- 2.1.PHP7.1 狐教程-【PHP基础】
- Invalid maximum heap size: -Xmx
- es分页方式search_after
- FreeTextBox编辑器的问题
- 如何向公众号添加的H5页面的链接(已解决)
- NVMe | 热插拔
- unix时间戳 为什么计算机时间要从1970年1月1日开始算起?
- Linux系统重装出现c0409a9f,自学IT吧论坛Linux系统运营系列视频教程#28期2016系统/服务器资源天地 - www.zxit8.com...
- 九度oj 题目1365:贝多芬第九交响曲
- 数据结构之线性表(手绘版)
热门文章
- 升级xcode14 和 ios16后的踩一些坑,持续更新(2022.11.18 15.40)
- 问题 Q: 买早餐Ⅱ
- 无法打开项目文件: .csproj,此安装不支持该项目类型,怎么解决?
- Win10 登录错误 801901f4
- 通过python-ldap处理ldap服务器
- c语言教材答案晁晓菲,科学网—金牌教师的“修炼密码”
- Java设计模式-命令模式
- 大白话说网络-----路由协议基础(一)
- Python第三方库PySpark框架基础应用(阶段六)
- 【原创】我是怎么从零开始教女同学进行php开发的(4)