序言
IOC配置(XML)
DI(依赖注入)
概念
DI与IOC之间的关联
set注入(主流方式)
构造器注入(了解)
集合注入(5种)
properties文件
操作步骤
ApplicationContext
序言
Spring学习笔记-IOC(一)_Tensorflow-CSDN博客https://blog.csdn.net/weixin_43715214/article/details/123244453上述文章讲述了Spring-IOC中的XML配置的bean的部分,后序内容请见下文
bean(以讲)DIproperties文件ApplicationContext
IOC配置(XML)
DI(依赖注入)
概念
概念
IoC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源
DI(Dependency Injection)依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入
DI与IOC之间的关联
应用程序依赖资源,Spring为其注入资源,应用程序不是依赖Spring,而是依赖Spring提供的资源
其实这两件事时在同一时间发生的,只是主、被动关系不同。
站在Spring容器的角度上来看,叫IOC;站在应用程序的角度上来看叫做DI。
DI依赖注入由两种方式——set注入、构造器注入
set注入(主流方式) set注入后面案例的源码
是Spring_demo02.zip的!
Spring示例代码: 根据黑马程序员的视频课,自己课后练习代码汇总,与本人CSDN文章相对应。https://gitee.com/li_chen_xin_TL/spring-sample-code.git名称是
格式
案例代码-set注入示例
Dao层的实现类-UserDaoImpl
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("user dao running...");
}
}
service层的实现类-UserServiceImpl
public class UserServiceImpl implements UserService {
// 注入number (非引用类型)
private int number;
public void setNumber(int number) {
this.number = number;
}
// 1.对需要注入的变量添加set注入
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
System.out.println("user service running" + number);
userDao.save();
}
}
配置文件applicationContext.xml
程序执行入口
public class UserApp {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ctx.getBean("userService");
userService.save();
}
}
问题:spring 到底注入接口还是实现类?
userDAO是个接口,private userDao userdao ,这种写法什么意思?接口不是不能被实例化的吗?_百度知道 (baidu.com)https://zhidao.baidu.com/question/1966330176031323940.html
spring注入接口还是实现类,同一接口有多个实现类,如何注入_q503385724的博客-CSDN博客_spring注入的是接口还是实现类https://blog.csdn.net/q503385724/article/details/87349369
构造器注入(了解) 构造器注入后面案例的源码
是Spring_demo03.zip中的!
Spring示例代码: 根据黑马程序员的视频课,自己课后练习代码汇总,与本人CSDN文章相对应。https://gitee.com/li_chen_xin_TL/spring-sample-code.git在set注入中,是通过属性值注入的,而在构造器注入中,是通过构造方法。
名称:constructor-arg
类型:标签
归属:bean标签
作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作
格式:
基本属性:
ref:设定引用类型构造方法参数对应bean的id ,不能与value同时使用
type :设定构造方法参数的类型,用于按类型匹配参数或进行类型校验
index :设定构造方法参数的位置,用于按位置匹配参数,参数index值从0开始计数
注意:一个bean可以有多个constructor-arg标签
案例代码-构造器注入示例
applicationContext.xml
UserServiceImpl实现类
public class UserServiceImpl implements UserService {
private UserDao userDao;
private int number;
private int age;
public UserServiceImpl(UserDao userDao,int number,int age ) {
this.userDao = userDao;
this.number = number;
this.age = age;
}
public void save() {
System.out.println("user service running" + " " + number + " " + age);
userDao.save();
}
}
UserApp
public class UserApp {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ctx.getBean("userService");
userService.save();
}
}
集合注入(5种)
名称:array,list,set,map,props
类型:标签
归属:property标签 或 constructor-arg标签
作用:注入集合数据类型属性
格式:
array
list
set
map
props
代码演示
itheima 66666 itheima666 666666 123456 66666 itheima 66666
properties文件
Spring提供了读取外部properties文件的机制,使用读取到的数据为bean的属性赋值
操作步骤
1.准备外部properties文件
2.开启context命名空间支持
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
3.加载指定的properties文件
4.使用加载的数据
注意:如果需要加载所有的properties文件,可以使用*.properties表示加载所有的properties文件
注意:读取数据使用${propertiesName}格式进行,其中propertiesName指properties文件中的属性名
ApplicationContext
1.ApplicationContext是一个接口,提供了访问spring容器的API
2.ClassPathXmlApplicationContext是一个类,实现了上述功能
3.ApplicationContext的顶层接口是BeanFactory
4.BeanFactory定义了bean相关的最基本操作
5.ApplicationContext在BeanFactory基础上追加了若干新功能
对比BeanFactory
1.BeanFactory创建的bean采用延迟加载形式,使用才创建
2.ApplicationContext创建的bean默认采用立即加载形式
FileSystemXmlApplicationContext
可以加载文件系统中任意位置的配置文件,而ClassPathXmlApplicationContext只能加载类路径下的配置文件



