写在前面
接着记录自己的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文件中进行依赖注入/不同的依赖注入类型有哪些以及怎么写相关推荐

  1. Spring Boot概述与入门特点配置方式注入方式yim配置文件与多文件配置Spring Boot自动配置原理lombok应用

    1. Spring Boot概述 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot简介可以 ...

  2. Spring Boot配置@spring.profiles.active配置

    一 pom.xml配置如下: <profiles><profile><id>dev</id><properties><spring.p ...

  3. Spring:配置Spring

    3.配置Spring 3.1别名alias 我们可以通过alias标签给每个Bean取个别名 <alias name="userDao" alias="user&q ...

  4. jenkins修改pom文件_jenkins小插曲-maven pom文件插件配置

    jenkins工作空间的文件还在workspace下面,现在将它自动部署到tomcat的webapps下面,需要在pom.xml文件中配置部署插件. 准备工作: 配置tomcat的访问权限,在mave ...

  5. (转)通过maven,给没有pom文件的jar包生成pom文件,maven项目引入本地jar包

    文章完全转载自 : https://blog.csdn.net/qq_31289187/article/details/81117478 问题一: 经常遇到公司私服或者中央仓库没有的jar包,然后通过 ...

  6. java 用properties文件配置spring数据源,用spring的JdbcTemplate的queryForList查数据

    使用的jar包: ojdbc14.jar spring-2.5.jar commons-dbcp-1.4.jar 目录结构ress(source folder)->conff(package)下 ...

  7. Spring MVC - 配置Spring MVC

    写在前面的话: 现在开始一段新的学习历程:Spring MVC.还是按照原来的三步走学习模式(what.why.how)进行讲解. 1.Spring MVC是什么(what) Spring MVC属于 ...

  8. spring boot 配置网关时404错误_Kong中使用grpcweb插件代理grpc服务时遇到的坑

    在大型分布式系统中,有很多的微服务对外提供服务,也会有各种微服务的协议需要集成,比如http,https,grpc的,这时就需要一个API网关提供高性能.高可用的API托管服务,帮助服务的开发者便捷地 ...

  9. Spring Boot——配置Spring Security配置类DEMO

    源代码 package club.zstuca.myzstu.filter;import club.zstuca.myzstu.entity.Resource; import club.zstuca. ...

最新文章

  1. 苹果为了不让AirTag被用来跟踪,将推出一个安卓应用
  2. Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-上
  3. war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
  4. 好消息 | 顶级 AI 华人学者拟加入清华大学自动化系!
  5. 用Web Developer工具栏发现SEO问题的方法
  6. java并发:线程同步机制之计数器Exechanger
  7. 点石成金:访客至上的网页设计秘笈pdf
  8. easyMule-VeryCD-src---VS2010调试笔记
  9. 《普林斯顿微积分读本》学习笔记
  10. Java怎么学?分享6个学习窍门
  11. oracle数据库写文件,Oracle对操作系统文件的读写操作
  12. Windows 在Windows中关闭/最小化窗口的几种快捷方法
  13. 37.0.概率论与数理统计-常用统计量及其分布,次序统计量,(样本均值,样本方差,样本标准差,样本k阶矩,样本k阶中心矩)
  14. uniAPP上架iOS商店踩到的坑(记录)
  15. 相约3.8 罗姆EEPROM在线研讨会
  16. 汉字转拼音 java_Java汉字转拼音工具类完整代码实例
  17. Meanshift聚类算法
  18. 18-《致橡树》-舒婷
  19. 国内使用chatgpt便捷方式-CSDN内部
  20. 全志A31下5M的CMOSCamera移植修改记录表

热门文章

  1. 华为公司正在清理 34 岁以上的员工?45岁以后的程序员都到哪里去了?
  2. 《炬丰科技-半导体工艺》硅外延生长基底的表面处理
  3. CVE-2021-4034 Pkexec LPE原理精析
  4. java入我心_JVM(一):久识你名,初居我心
  5. hb哈勃公链_骗子云集的哈勃公链HB属鸵鸟的,开盘之前还要烧香祭天!?
  6. 韶关学院计算机专业录取分数线,韶关学院录取分数线2021是多少分(附历年录取分数线)...
  7. 你必须要掌握的技能:如何利用搜索引擎快速获取信息?
  8. 短信验证码的实现(阿里云)
  9. PHP短视频聚合无水印在线解析源码
  10. 选型宝访谈:微软CRM X 全球顶尖AI技术=?