spring bean的创建,生命周期

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销毁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1025 反转链表 (25分)

输入样例&#xff1a; 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218 输出样例&#xff1a; 00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1 解题心得&#xff1a; 本题两个注意点&am…

网站如何启用SSL安全证书?IIS7启用新建Https:/

网站使用SSL&#xff0c;通过SSL证书申请&#xff0c;然后导入之后。我们需要对网站进行设置才能正常使用SSL证书&#xff0c;具体如何操作让网站启用SSL呢&#xff0c;本经验以一个网站添加SSL主机头的方式为例来&#xff0c;网站启用SSL服务器安全证书。(如果没有证书的&…

从0实现三层神经网络

本文目标 分享李沐老师关于深度学习的观点&#xff1a;1⃣️从实践的角度入手深度学习可能比单纯的研究算法更好&#xff1b;2⃣️如果想学习深度学习&#xff0c;要只用简单的数据结构&#xff0c;譬如numpy、NDArray&#xff0c;从0实现一个深度学习算法&#xff0c;这样才能…

js乱码解决

mmp最近在写项目&#xff0c;引入js文件&#xff0c;f12控制台老给我报红色的错误&#xff0c; 点开&#xff0c;是引入js文件中文乱码。。。反手myeclipse打开js文件&#xff0c;也正常啊&#xff0c;中文没乱码。。。 解决办法 打开js文件&#xff0c;设置为带bom的utf-8编码…

C# 去除所有的html标签

/// <summary> /// 去除所有的html标签 /// </summary> /// <param name"strhtml"></param> /// <returns></returns> public static string Removestriphtml(string strhtml) { string stroutput strhtml; Regex regex new R…

面向对象方法使用gluon

一、面向过程与面向对象的优缺点 面向过程使用mxnet&#xff0c;就是使用gluon封装好的对象&#xff0c;不加改动的表达机器学习的逻辑过程&#xff0c;其特点是方便、快捷&#xff0c;缺点是不够灵活&#xff08;虽然可以应对90%以上的问题了&#xff09;&#xff0c;面向对象…

Mapreduce执行过程分析(基于Hadoop2.4)——(一)

1 概述 该瞅瞅MapReduce的内部运行原理了&#xff0c;以前只知道个皮毛&#xff0c;再不搞搞&#xff0c;不然怎么死的都不晓得。下文会以2.4版本中的WordCount这个经典例子作为分析的切入点&#xff0c;一步步来看里面到底是个什么情况。 2 为什么要使用MapReduce Map/Reduce&…

spring配置数据源

spring配置数据源1. 什么是数据源连接池2. 手动创建数据源&#xff08;c3p0&#xff0c;druid&#xff09;2.1 导入数据库连接驱动&#xff0c;数据源pom坐标2.2 创建数据源2.3 配置jdbc.properties, 解耦拿到数据源3. spring配置数据源3.1 bean方式创建数据源13.2 bean方式创建…

基于mxnet的Regression问题Kaggle比赛代码框架

一、概述 书中3.16节扩展一下可以作为kaggle比赛的框架&#xff0c;这个赛题的名字是House Prices: Advanced Regression Techniques&#xff0c;是一个Regression问题。 二、Deeplearning的一般流程 结合李航《统计学习方法》中对机器学习流程的总结&#xff0c;分为data、…

centos8安装

一. 下载centos centos下载 下载镜像版 mini版本 二&#xff0c;安装centos8 虚拟机安装 可 打开虚拟机安装centos 选择下载的镜像 配置磁盘大小 配置资源 配置虚拟机内存&#xff0c;处理器个数等. 安装成功后&#xff0c;也可配置

alert,confirm和prompt

1.警告消息框alertalert 方法有一个参数&#xff0c;即希望对用户显示的文本字符串。该字符串不是 HTML 格式。该消息框提供了一个“确定”按钮让用户关闭该消息框&#xff0c;并且该消息框是模式对话框&#xff0c;也就是说&#xff0c;用户必须先关闭该消息框然后才能继续进行…

(一)卷积网络之基础要点

一、提出问题 对于生活生产中的表格数据&#xff0c;至多也就上百维&#xff0c;而且表格数据的行与行之间没有序列和位置上的关系&#xff0c;所以用传统的机器学习算法就可轻松的解决这些问题。但是到了图片数据&#xff0c;传统机器学习就非常吃力了&#xff0c;一个普通的…

Windows Phone本地数据库(SQLCE):3、[table]attribute(翻译) (转)

这是“windows phone mango本地数据库&#xff08;sqlce&#xff09;”系列短片文章的第三篇。 为了让你开始在Windows Phone Mango中使用数据库&#xff0c;这一系列短片文章将覆盖所有你需要知道的知识点。这个时候我将谈谈有关你使用windows phone mango本地数据库时使用[ta…

Java代理模式——静态代理动态代理

proxy mode1. 什么是代理1.1 例子解释1.2 作用2. 静态代理2.1 优缺点分析2.2 以厂家卖u盘用代码说明3. 动态代理3.1 什么是动态代理3.2 jdk实现原理3.3 代码描述1. 什么是代理 1.1 例子解释 1. 生活中的例子&#xff0c;常见的商家卖东西&#xff0c; 商家就是代理&#xff0…

一、Insertion sort

1. 问题 2. 算法 2.1 伪代码 2.2 算法思想 2.3 手工演示 2.4 Python实现 《算法导论》一书数组默认从111开始&#xff0c;这种方式适合算法分析&#xff0c;从000开始适合程序实现&#xff0c;为了能和伪代码一致便于对比&#xff0c;后边所有的Python实现中数组均从111开始。…

windows 2502 2503 错误解决

1. 错误原因 1. c盘下temp文件夹权限问题 2. c盘temp文件夹环境变量配置错误&#xff0c;或者更改了2. 造成的问题 每次安装msi文件或者卸载msi程序包时&#xff0c;都会弹出此恶心的错误...3. 解决 1. 针对问题一&#xff0c;解决&#xff0c;以管理员身份安装或者卸载 win…

Hibernate学习笔记

Hibernate是什么&#xff1a; Hibernate 架构&#xff1a; 下载、安装、必要的 jar包、环境CLASSPAST的设置&#xff08;此步骤省略&#xff09; Hibernate框架的使用步骤&#xff1a;1、创建Hibernate的配置文件&#xff08;hibernate.cfg.xml&#xff09;2、创建持久化类&…