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服务器安全证书。(如果没有证书的&…

js乱码解决

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

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方式创建…

centos8安装

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

一、Insertion sort

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

Hibernate学习笔记

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

二、Merge sort

1 问题 2 算法 2.1 伪代码 2.2 算法思想 2.3 手工演示 2.4 Python实现 # -*- coding: utf-8 -*- import sysdef merge(A, p, q, r):n1 q - p 1n2 r - qL [0] * (n1 2)R [0] * (n2 2)for i in range(1, n11):L[i] A[pi-1]for j in range(1, n21):R[j] A[qj]L[n11] 6…

三、递归树分析法

1 问题 2 解决思路 使用递归树猜想一个上界&#xff0c;使用归纳法证明上界也是下界。 2.1 使用递归树&#xff08;recursion tree&#xff09;猜想结论&#xff08;不严谨&#xff09; 使用递归树两点&#xff1a;1⃣️逐行展开&#xff1b;2⃣️逐行相加&#xff1b; 逐行…

html5input表单标签新属性

初探h5一&#xff0c;h5 新增表单类型二&#xff0c;新增表单属性三&#xff0c;code demo一&#xff0c;h5 新增表单类型 •email 邮箱地址•url 网络地址•number 数字框•range 滑块•Date pickers (date, month, week, time, datetime, datetime-local) 日期时间框•search…

关于java的JIT知识

1.JIT的工作原理图 工作原理 当JIT编译启用时&#xff08;默认是启用的&#xff09;&#xff0c;JVM读入.class文件解释后&#xff0c;将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码。 通常javac将程序源码编译&#xff0c;转换成java字节码&#xff0c;JVM通过解释…

Storage 使用

关于web项目数据存储1. 存储种类2. localStorage/sessionStorage2.1 概念2.2 api的使用3. 学生curd测试localStorage针对客户端存储讲 ——storage1. 存储种类 1. 分为服务器端和客户端的存储 2. 服务器端&#xff1a;1. 内存存储(临时)application session request pageConte…