SSM之Spring文件配置/Spring怎么在pom文件中进行依赖注入/不同的依赖注入类型有哪些以及怎么写
写在前面:
接着记录自己的Spring学习之旅,若看不懂则建议先看上一篇博客SSM框架之Spring介绍开发流程/IDEA如何建立Spring项目,详细代码可在我的Gitee仓库ssm-learning克隆下载学习使用!
1.3 Spring配置文件
1.3.1 Bean标签
1.3.1.1 目的
让spring容器来调用配置的信息创建对象
1.3.1.2 基本属性
- id :唯一的标识,标明Bean实例在Spring容器中是唯一的,没有重复的
- class :Bean的全限定名,用Bean实例配置要创建的对象所属的类,一般写到类名
1.3.1.3 调用函数
**默认调用==(Bean中class参数配置的类)类中==无参构造函数 **, 类中没有无参构造无法运行
1.3.1.4 Bean标签范围配置Scope
1.3.1.4.1 Scope参数
参数 | 说明 | 实例化 |
---|---|---|
singleton | 单例,即当前项目中仅且只创建一个对象且每次调用都是同一对象,默认 | 容器加载时实例化 |
prototype | 多例,即可调用多次且每次都不同 | 调用getBean时实例化 |
request | 用于Web项目,当Spring容器创建完对象后将其存入request域中 | |
session | 用于Web项目,当Spring容器创建完对象后将其存入session域中 | |
global session | 用于Portlet环境,若无Portlet则等同于session |
1.3.1.4.2 使用Scope时Bean生命周期
参数 | 对象创建 | 对象运行 | 对象销毁 |
---|---|---|---|
prototype | 使用对象时创建 | 对象使用便在 | 长时间未使用则被Java垃圾回收器回收 |
singleton | 应用加载容器创建时创建 | 容器在对象在 | 容器销毁对象销毁 |
即:对象和容器共生死
1.3.1.5 Bean的生命周期
- init-method:指定类中初始化方法
- destroy-method:指定类中销毁方法
1.3.1.6 Bean实例化方式
- 无参构造方法实例化 ,最常用,重点
- 工厂静态方法实例化
- 工厂实例化方法实例化
applicationContext中代码如下所示:
<!--静态工厂--> <bean id="UserDaoStaticFactory" class="com.demo.factory.StaticFactory" factory-method="getUserDao"></bean><!-- 实例工厂--> <bean id="factory" class="com.demo.factory.DynamicFactory"></bean><bean id="UserDaoFactories" factory-bean="factory" factory-method="getUserDao"></bean>
1.3.2 依赖注入
1.3.2.1 问题引入
目前外部Web层想要一个dao层对象,但是Web只能调用到Service对象,怎么实现?想法是配置好容器,在Service接口实现类中再次让Spring容器产生一个dao层对象并传过去,即getBean调用Service对象时service对象在getBean创建Dao层对象。
1.3.2.2 依赖注入
上述这种需要对象是不直接创建而通过控制反转,交给容器创建对象的方式叫做依赖注入(Dependency Injection),是IOC的具体实现,可以降低业务层之间的耦合度。
1.3.2.3 依赖注入方式
1.3.2.3.1 构造方法
- 在ServiceImpl中使用有参数的构造方法,更改如下:
private UserDao userDao; // 有参构造
public UserServiceImpl(UserDao userDao) { this.userDao = userDao;
}
public UserServiceImpl() {
}public void sayHello() {
// 土方法
// ApplicationContext appletContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// UserDao userDao1 = (UserDao) appletContext.getBean("UserDao");
// userDao1.sayHello(); // 依赖注入 userDao.sayHello(); }
- applicationContext中配置,如下:
<bean id="UserDao" class="com.demo.dao.impl.UserDaoImpl"></bean> <!--用构造方法注入--> <bean id="UserService" class="com.demo.service.impl.UserServiceImpl">
<!-- name为构造函数中的参数名,ref为引用--> <constructor-arg name="userDao" ref="UserDao"/> </bean>
1.3.2.3.1Set方法
- 在ServiceImpl中添加dao的set方法,更改如下:
// 用set方法注入public void setUserDao(UserDao userDao) { this.userDao = userDao; }
- applicationContext中配置,如下:
<!--依赖注入-->
<bean id="UserDao" class="com.demo.dao.impl.UserDaoImpl"></bean> <bean id="UserService" class="com.demo.service.impl.UserServiceImpl" > <!-- name为setUserDao中set后半段userDao ref参数为上面要注入的配置好的bean的id--> <property name="userDao" ref="UserDao"></property></bean>
1.3.2.4 依赖注入数据类型
1.3.2.4.1 对象类型
上述操作已说明,不再赘述!
1.3.2.4.2 普通、引用及集合数据类型
- 在实体类中创建int、String、List、map以及Properties属性并用set方法注入,如下:
/ 普通数据类型 int age;
// 引用数据类型 String username;
// 集合 private List<String> userList; private Map<String, User> userMap;
// property private Properties properties; // 用set方法注入 public List<String> getUserList() { return userList; } public void setUserList(List<String> userList) { this.userList = userList; } public Map<String, User> getUserMap() { return userMap; } public void setUserMap(Map<String, User> userMap) { this.userMap = userMap; } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } public void setAge(int age) { this.age = age; } public void setUsername(String username) { this.username = username; } public void show() { System.out.println("测试普通数据类型"); System.out.println("username = " + username + ", age = " + age); System.out.println("集合数据类型"); System.out.println(userList); System.out.println(userMap); System.out.println(properties); }
- 在applicationContext中配置,如下:
<!-- 依赖注入其它数据类型,当注入其它数据类型时不用ref,只用value赋值-->
<bean id="IOCData" class="com.demo.dao.impl.IOCData">
<!-- 普通数据类型 --> <property name="username" value="王祖贤"></property> <property name="age" value="20"></property>
<!-- 注入集合数据类型--> <property name="userList"> <list><value>林青霞</value> <value>刘诗诗</value> </list></property><property name="userMap"> <map> <entry key="卡通1" value-ref="user1" /> <entry key="卡通2" value-ref="user2" /> <entry key="卡通3" value-ref="user3" /> </map> </property><property name="properties"> <props ><prop key="关公">战秦琼</prop> <prop key="张三">法外狂徒</prop> </props> </property>
</bean>
1.3.2.5 测试
用Junit单元测试,同
SSM框架之Spring介绍开发流程/IDEA如何建立Spring项目 中的项目测试操作,会在控制台出现相应结果!比如测试注入其它数据类型结果如下图
1.3.3 分模块开发
1.3.3.1 问题描述
实际开发过程中会很复杂,不可能所有文件都配置到Spring配置xml文件中,会每人负责一块写到自己的配置文件中,然后在主配置文件通过import标签引入加载,这样也方便后期维护!
1.3.3.2 引入代码
<import resource="applicationContext-xxx.xml"></import>
SSM之Spring文件配置/Spring怎么在pom文件中进行依赖注入/不同的依赖注入类型有哪些以及怎么写相关推荐
- Spring Boot概述与入门特点配置方式注入方式yim配置文件与多文件配置Spring Boot自动配置原理lombok应用
1. Spring Boot概述 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot简介可以 ...
- Spring Boot配置@spring.profiles.active配置
一 pom.xml配置如下: <profiles><profile><id>dev</id><properties><spring.p ...
- Spring:配置Spring
3.配置Spring 3.1别名alias 我们可以通过alias标签给每个Bean取个别名 <alias name="userDao" alias="user&q ...
- jenkins修改pom文件_jenkins小插曲-maven pom文件插件配置
jenkins工作空间的文件还在workspace下面,现在将它自动部署到tomcat的webapps下面,需要在pom.xml文件中配置部署插件. 准备工作: 配置tomcat的访问权限,在mave ...
- (转)通过maven,给没有pom文件的jar包生成pom文件,maven项目引入本地jar包
文章完全转载自 : https://blog.csdn.net/qq_31289187/article/details/81117478 问题一: 经常遇到公司私服或者中央仓库没有的jar包,然后通过 ...
- java 用properties文件配置spring数据源,用spring的JdbcTemplate的queryForList查数据
使用的jar包: ojdbc14.jar spring-2.5.jar commons-dbcp-1.4.jar 目录结构ress(source folder)->conff(package)下 ...
- Spring MVC - 配置Spring MVC
写在前面的话: 现在开始一段新的学习历程:Spring MVC.还是按照原来的三步走学习模式(what.why.how)进行讲解. 1.Spring MVC是什么(what) Spring MVC属于 ...
- spring boot 配置网关时404错误_Kong中使用grpcweb插件代理grpc服务时遇到的坑
在大型分布式系统中,有很多的微服务对外提供服务,也会有各种微服务的协议需要集成,比如http,https,grpc的,这时就需要一个API网关提供高性能.高可用的API托管服务,帮助服务的开发者便捷地 ...
- Spring Boot——配置Spring Security配置类DEMO
源代码 package club.zstuca.myzstu.filter;import club.zstuca.myzstu.entity.Resource; import club.zstuca. ...
最新文章
- 苹果为了不让AirTag被用来跟踪,将推出一个安卓应用
- Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-上
- war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
- 好消息 | 顶级 AI 华人学者拟加入清华大学自动化系!
- 用Web Developer工具栏发现SEO问题的方法
- java并发:线程同步机制之计数器Exechanger
- 点石成金:访客至上的网页设计秘笈pdf
- easyMule-VeryCD-src---VS2010调试笔记
- 《普林斯顿微积分读本》学习笔记
- Java怎么学?分享6个学习窍门
- oracle数据库写文件,Oracle对操作系统文件的读写操作
- Windows 在Windows中关闭/最小化窗口的几种快捷方法
- 37.0.概率论与数理统计-常用统计量及其分布,次序统计量,(样本均值,样本方差,样本标准差,样本k阶矩,样本k阶中心矩)
- uniAPP上架iOS商店踩到的坑(记录)
- 相约3.8 罗姆EEPROM在线研讨会
- 汉字转拼音 java_Java汉字转拼音工具类完整代码实例
- Meanshift聚类算法
- 18-《致橡树》-舒婷
- 国内使用chatgpt便捷方式-CSDN内部
- 全志A31下5M的CMOSCamera移植修改记录表
热门文章
- 华为公司正在清理 34 岁以上的员工?45岁以后的程序员都到哪里去了?
- 《炬丰科技-半导体工艺》硅外延生长基底的表面处理
- CVE-2021-4034 Pkexec LPE原理精析
- java入我心_JVM(一):久识你名,初居我心
- hb哈勃公链_骗子云集的哈勃公链HB属鸵鸟的,开盘之前还要烧香祭天!?
- 韶关学院计算机专业录取分数线,韶关学院录取分数线2021是多少分(附历年录取分数线)...
- 你必须要掌握的技能:如何利用搜索引擎快速获取信息?
- 短信验证码的实现(阿里云)
- PHP短视频聚合无水印在线解析源码
- 选型宝访谈:微软CRM X 全球顶尖AI技术=?