spring入门第二讲 bean的生命周期 装配方式 Spring整合Junit
bean的生命周期
实体类
//初始化
public void init(){System.out.println("--初始化--");
}//销毁
public void destory(){System.out.println("--销毁--");
}
<bean id="user" class="cn.yunhe.beans.User" init-method="init" destroy-method="destory"><property name="age" value="12"></property><property name="name" value="小张"></property>
</bean>
//测试
@Test
public void queryUsersTest() {//1、读取Spring配置文件ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//2、通过Spring容器创建实例对象User user = ac.getBean("user", User.class);System.out.println(user);//3、手动关闭容器ac.close();
}
注意:destroy-method方法只有在scope为singleton的时候才能生效
bean的作用域
scope属性定义对象的作用域 默认作用域(singleton单例)
singleton 单例
prototype 多例
request 请求范围内
global 全局作用域
<!--scope定义bean的作用域-->
<bean id="userDao" class="cn.yunhe.dao.impl.UserDaoImpl" scope="prototype"></bean>
//两者的地址一样则代表是同一个对象
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext2.xml");
IUserDao userDao = ac.getBean("userDao",UserDaoImpl.class);
System.out.println(userDao);
IUserDao userDao2 = ac.getBean("userDao",UserDaoImpl.class);
System.out.println(userDao2);
装配方式
1. xml装配
手动装配
以无参构造+setter进行演示
<bean id="date" class="java.util.Date"></bean><bean id="custom" class="cn.yunhe.beans.Custom"><property name="num" value="11"></property><property name="name" value="小小"></property><property name="date" ref="date"></property><property name="arr"><array><value>关羽</value><value>刘备</value><value>张飞</value></array></property><property name="list"><list><value>关羽</value><value>刘备</value><value>张飞</value></list></property><property name="map"><map><entry><key><value>name</value></key><value>项羽</value></entry><entry><key><value>坐骑</value></key><value>乌骓</value></entry><entry><key><value>user</value></key><bean id="user" class="cn.yunhe.beans.User"></bean></entry></map></property></bean>
2.自动装配
autowire 自动装配
byType:按照类型装配,查找上下文中是否有指定类型的对象,有就注入成功,没有就失败,如果有查找多个也会注入失败
<bean id="userDao" class="cn.yunhe.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.yunhe.service.impl.UserServiceImpl" autowire="byType">
</bean>
//byType类型时通过无参构造+setter方式构建对象IUserDao userDao ;public UserServiceImpl(){}public UserServiceImpl(IUserDao userDao){this.userDao = userDao;}public void setUserDao(IUserDao userDao){this.userDao = userDao;}
byName:按照名称装配,根据名称在上下文中进行查找,找到就注入,找不到就失败
<!--修改dao的id值,测试byName的使用-->
<bean id="userDao" class="cn.yunhe.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.yunhe.service.impl.UserServiceImpl" autowire="byName">
</bean>
constructor:按照构造器参数类型装配,,和byType一样,根据构造器的参数类型匹配
3.注解方式装配
@Component 通用注解 类似 当实在不知道该类是做什么的那就选这个
@Component("") 类似
@Controller/@Controller("") 表现层
@Service/@Service("") 业务层
@Repository/@Repository("") 数据层
@Scope("") 定义生命周期
自动注入:
1. @Autowired //按类型注入2. 按名称注入1. @Autowired+@Qualifier("")2. @Resources(name="") //使用该注解需要spring-aop.jar的支持
测试步骤:
1、给dao的实现类和service的实现类中分别加上@Component注解
@Component("userDao")
public class UserDaoImpl implements IUserDao {@Overridepublic List<User> queryUsers() {System.out.println("查询用户列表");return null;}
}@Component("userService")
public class UserServiceImpl implements IUserService {@AutowiredIUserDao userDao;@Overridepublic List<User> queryUsers() {return userDao.queryUsers();}}
2、在配置文件中配置扫描,指定要扫描的包
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置注解扫描 base-package:指定要扫描的包--><context:component-scan base-package="cn.yunhe.dao.impl,cn.yunhe.service.impl"></context:component-scan>
</beans>
Spring整合Junit
当前所用环境:spring5.x 需要junit的版本在4.12及以上
需要junit的jar包
需要Spring中的test包
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class SpringJunitTest {public static void main(String[] args) {/*//读取容器ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//通过getBean来构建对象IUserService userSerivce = ac.getBean(IUserService.class);userSerivce.delUser();userSerivce.saveUser();*/}@AutowiredIUserService userSerivce;@Testpublic void test(){userSerivce.delUser();userSerivce.saveUser();}
}
spring入门第二讲 bean的生命周期 装配方式 Spring整合Junit相关推荐
- Spring容器启动流程+Bean的生命周期【附源码】
如果对SpringIoc与Aop的源码感兴趣,可以访问参考:https://javadoop.com/,十分详细. 文章目录 Spring容器的启动全流程 Spring容器关闭流程 Bean 的生命周 ...
- Spring全家桶(四)Bean的生命周期
十.Bean生命周期 10.1 Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,也允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进 ...
- 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析
文章目录 1.BeanFactory和ApplicationContext的区别? 2. IOC与 Bean的加载过程 ①:初始化容器DefaultListableBeanFactory ②:创建读取 ...
- Spring源码学习--Bean的生命周期
Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...
- Spring学习总结1——bean的生命周期
为什么80%的码农都做不了架构师?>>> Spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao...),并且可以维护bea ...
- Spring源码分析——Bean的生命周期
文章目录 说明 测试代码 说明 本文从源码的角度分析Spring中Bean的加载过程,本文使用的Spring版本为4.3.25.RELEASE 测试代码 测试代码如下,根据这段简单的测试代码,一步步跟 ...
- Spring高级应用之bean的生命周期
简介: 在spring世界中,一切皆为bean,spring是面向bean编程的,bean也可以称为组件,是一个个java对象,多个组件间协调工作完成复杂的业务功能. 所以理解bean的生命周期,方便 ...
- Spring源码深度解析,Spring源码以及Bean的生命周期(五)(附代码示例:)
五)Bean 的生命周期,创建---初始化---销毁的过程 目录 五)Bean 的生命周期,创建---初始化---销毁的过程 一 , 指定初始化方法 init-method 方法 二 ,指定销毁 ...
- Spring:IOC容器Bean的生命周期的int和destro方法详解(4)
Bean的生命周期 1)实例化Bean 对于BeanFactory容器,当客户向容器请求一个未初始化的bean时,或初始化bean的时候需要注入另一个未初始化的依赖时,容器就会调用createBean ...
最新文章
- 什么是A记录、MX记录、CNAME记录
- [转] 大规模服务设计部署经验谈
- XDP/eBPF — 架构设计
- LeetCode上删除链表末尾第N个节点算法——Remove Nth Node From End of List
- SpringBoot 中 @RequestBody的正确使用方法
- mongodb 怎样检测 安装成功 以及mongodb的一些增删改查命令
- 图文列表+富文本解析+折线图示例小程序模板
- python功能模块之psutil_1.python系统性能信息模块之psutil模块
- 最近30分钟合约市场爆仓842万美元
- 电动汽车燃料电池行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 最火的开源项目及编程语言
- 此版本的visual studio无法打开下列项目_深度学习实现高精度钢琴曲转谱Piano transcription项目简明使用教程...
- 我只注视你全cg存档_科幻国漫持续推出,全CG动画星骸骑士首播,这一次吞噬星空输了...
- [P5172] Sum
- Android APP开发入门教程
- android xutils加密,xutils
- 电信网通竞合协议事件升级 内部文件泄露曝裂痕
- Ubuntu安装中文字体
- 9、攻守兼备的投资利器--可转债基金
- vs2013 与mysql的连接数据库_VS2013连接Mysql数据库的设置以及常见问题
热门文章
- XAI之SHAP:SHAP算法(How—每个特征如何重要/解释单个样本的预测)的简介(背景/思想/作用/原理/核心技术点/优缺点)、常用工具库、应用案例之详细攻略
- 数据挖掘常用的模型,具体有哪些?
- Jenkins在tomcat中启动配置nginx
- 2019.4.3拼多多笔试第一题
- JMeter进行并发测试
- 想要学美术找不到靠谱画室?美术加网校基础课程推荐~
- JPEG压缩算法的Python实现 -- 2 JPEG介绍
- 两级交流放大电路实验仿真
- 使用静态内部类单例模式创建自定义线程池
- python教程79--A4纸增值税电子发票合并打印