1. 初探spring

  1. 什么是spring
    Spirng 是分层的Java se/ee应用full-stack(web层mvc dao层jdbc模板 业务事务管理)轻量级开源框架,以IoC(inverse of control :反转和控制) 和
    AOP(Aspect Oriented Programming: 面向切面编程)为内核。

    还能整合开源世界 著名的第三方框架和类库

  2. spring发展历程
    1997年 EJB思想 。。。 2006年 ejb3.0

    2017 5.0版本发布

  3. spring的优势

    3.1 方便解耦,简化开发(ioc创建dao层对象了)
    3.2 aop面向切面编程
    3.3 声明式事务的支持(配置一片方法控制事务控制)
    3.4 方便程序测试
    3.5 方便集成各种优秀的框架
    3.6 降低JavaEE api的使用难度
    3.7 Java源码时经典的学习范例

  4. spring的体系结构

    4.1 底层 核心控制器
    beans 创建对象用的
    core 核心
    context spring的上下文
    spEl spring el表达式
    4.2 上一层
    aop,aspects,instrumentation,messaging

  5. spring快速入门

    5.1 spring程序开发步骤
    5.1.1 导入spring开发的基本坐标包
    5.1.2 编写Dao接口和实现类
    5.1.3 创建spring核心配置文件(xml文件)
    5.1.4 在spring配置文件中配置userdaoimpl
    5.1.5 使用spring的api获得bean实例 (创建applicationContext对象)

  6. spring下载地址

https://repo.spring.io/release/org/springframework/spring/

2. spring bean的创建

2.1 idea创建maven依赖的项目

2.2 完成项目创建

2.3 配置pom.xml, 引入maven中的依赖关系(这里引入spring框架滴)

该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。


2.4 引入框架

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 当前项目信息 --><groupId>org.example</groupId><artifactId>spring_02</artifactId> <!-- 项目名 --><version>1.0-SNAPSHOT</version><dependencies> <!-- 导入依赖关系 spring框架 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.10.RELEASE</version></dependency><dependency><groupId>junit</groupId> <!-- junit 用来测试@Test注解 --><artifactId>junit</artifactId><version>4.13</version></dependency></dependencies></project>

2.5 终于可以配置bean拉,啊啊啊

  • 对dao接口的实现类进行bean的创建
package com.lovely.dao;public interface UserDao {public void save();
}
  • 实现类
package com.lovely.dao.impl;import com.lovely.dao.UserDao;public class UserDaoImpl implements UserDao {public void save() {System.out.println("save running...");}}
  • 创建spring核心配置文件applicationContext.xml 配置bean
<?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"><!-- 配置bean id为唯一标识 class为类所在的全路径1--><bean id="userDao" class="com.lovely.dao.impl.UserDaoImpl"> </bean></beans>
  • 测试创建的bean
package com.lovely.demo;import com.lovely.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserDaoDemo {public static void main(String[] args) {// spring客户端ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");// getBean(id) 来得到实体类对象UserDao dao = (UserDao) app.getBean("userDao");dao.save();}
}
  • 打印结果

  • bean通过工厂方式创建

    <!--  工厂模式 静态方法实例bean  --><bean id="userDao" class="com.lovely.Factory.StaticFactory" factory-method="getUserDao"></bean>
    <!--  工厂实例方法创建bean  --><bean id="factory" class="com.lovely.Factory.DynamicFactory"></bean><bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>

2.6 bean的作用域标签范围

  • bean的单例模式和多例模式
 // spring容器决定帮你创建单个userdao对象 还是多个userdao对象。<bean id="userDao" class="com.lovely.dao.impl.UserDaoImpl" scope="singleton"></bean><!-- crtl + d 快速赋值一行 scope = singleton 单个对象 scope = prototype 多例模式 -->
  • 测试
package com.lovely.test;import com.lovely.dao.UserDao;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTest {@Testpublic void test1() {ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao1 = (UserDao) app.getBean("userDao");UserDao userDao2 = (UserDao) app.getBean("userDao");// 如果配置bean scope是单例模式 则只产生一个对象// 如果配置bean scope是多例的 则spring容器中每次产生一个对象System.out.println(userDao1 == userDao2);/*** bean标签的创建时机*      singleton spring web容器创建,只有一个*      prototype 每次创建对象时 就会创建bean 会创建多个 gc回收*/}}

3. bean的生命周期

  • bean对象的创建,初始化,容器销毁,bean销毁
package com.lovely.dao.impl;import com.lovely.dao.UserDao;public class UserDaoImpl implements UserDao {public UserDaoImpl() {// 确定bean的生命周期 singleton prototypeSystem.out.println("user dao 创建了");}public void init() {System.out.println("user bean init...");}public void destroy() {System.out.println("user bean destory...");}
}
  • 配置文件
<bean id="userDao" class="com.lovely.dao.impl.UserDaoImpl" init-method="init" destroy-method="destroy">
</bean>
  • 测试
 @Testpublic void test2() {// bean在spring容器中的出生创建ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao dao = (UserDao) app.getBean("userDao");System.out.println(dao);app.close();}
  • 从容器的加载到对象的创建,初始化,容器销毁,bean销毁

spring bean的创建,生命周期相关推荐

  1. 一张图搞懂Spring bean的完整生命周期

    转载自 一张图搞懂Spring bean的完整生命周期 一张图搞懂Spring bean的生命周期,从Spring容器启动到容器销毁bean的全过程,包括下面一系列的流程,了解这些流程对我们想在其中任 ...

  2. Spring Bean作用域与生命周期

    目录 Bean的作用域: Bean有六大行为模式 1.singleton:单例模式(默认) 2.prototype: 原型模式(多例模式) 3.request: 请求作用域(Spring MVC) 4 ...

  3. 把对象的创建交给spring来管理——  1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期

    把对象的创建交给spring来管理 spring对bean的管理细节     1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期 创建Bean的三种方式 ...

  4. Spring 了解Bean的一生(生命周期)

    该篇博客就来了解IoC容器下Bean的一生吧,也可以理解为bean的生命周期. 首先你需要知道的知识 在IoC容器启动之后,并不会马上就实例化相应的bean,此时容器仅仅拥有所有对象的BeanDefi ...

  5. SpringBoot 系列教程(五十):Spring Boot 1.X生命周期已结束 ,Spring Boot 2.X 走向舞台中心

    Spring Boot 1.x 生命周期已结束 2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束. 官方宣 ...

  6. J2EE高级开发框架小课程之Spring框架2——Spring容器作用域,生命周期,Spring管理对象之间依赖关系

    Spring容器作用域 Spring创建对象的作用域:Spring在创建对象时,默认只创建一个(单例模式) scope: singleton(默认 单例) 构造器就一次,结果true prototyp ...

  7. Spring的作用域与生命周期

    文章目录 一.lombok的安装与使用 二.Spring作用域 二.Bean原理分析 执行流程 Bean的生命周期 一.lombok的安装与使用 lombok插件可以提供给我们一些注释,这些注释可以很 ...

  8. Bean 作用域和生命周期

    目录 1.作用域定义 Bean 的作用域 Bean 的 6 种作用域 单例作用域(singleton)和全局作用域(application)区别 2.设置作用域 3.Bean 原理分析 3.1 Bea ...

  9. Spring:been的生命周期

    参考:https://blog.csdn.net/w_linux/article/details/80086950 在IoC容器启动之后,并不会马上就实例化相应的bean,此时容器仅仅拥有所有对象的B ...

最新文章

  1. gluoncv 训练自己的数据集,进行目标检测
  2. 主线程和子线程的同步控制
  3. 3.CM3内核架构-寄存器
  4. linux上怎么解压zip文件和tar.gz文件
  5. Java虚拟机(二)—主流Java虚拟机分类及发展历程
  6. json html双引号,当gethtml方法返回json时,json中的字符串如果存在双引号,会破坏json的格式, 如:quot;...
  7. Django自定义分页、bottle、Flask
  8. 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)
  9. WinUSB Component for .Net WinForm
  10. 幼儿园观察记录的目的和目标_幼儿园观察记录应该怎么写?
  11. android手势密码csdn,LeetCode 351. 安卓系统手势解锁(回溯)
  12. Python Pandas缺省值(NaN)处理
  13. 五分钟学会python_果粉有福了!5分钟学会用Python统计自己最爱听的音乐
  14. 虚拟机文件过多,如何删除?vmdk文件能删除吗?
  15. 一篇文章搞懂Typescript
  16. PHP代码审计实战之XDcms
  17. MATLAB给信号添加白噪声
  18. LeetCode刷题—股票交易问题
  19. html如何做斑马表格
  20. 时间序列预测 | Python实现Transformer时间序列数据预测

热门文章

  1. oracle之单行函数2
  2. 前端学习(1607):跨域请求
  3. 前端学习(1375):express参数中post参数的获取
  4. 前端学习(1124):思考题
  5. 前端学习(752):全局变量和局部变量
  6. 前端学习(593):使用devtools作为代码编辑器
  7. java学习(151):字节输出流
  8. 大小不固定的图片和多行文字的垂直水平居中
  9. Python-100 练习题 02
  10. 主类网络号怎么算_一文了解网络文化经营许可证的审批范围