Spring学习日记01_IOC_xml的三种注入方式
什么是IOC
- 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
- 使用IOC目的:为了耦合度降低
- 做入门案例就是IOC实现
IOC底层原理
- xml解析 工厂模式 反射
原始方式
class UserService{
execute(){
UserDao dao = new UserDao();
dao.add();
}
}
class UserDao{
add(){
...
}
}
- 缺点:耦合度太高
工厂模式
class UserService{
execute(){
UserDao dao = UserFactory.getDao();
dao.add();
}
}
class UserDao(){
add(){
...
}
}
class UserFactory{
public static UserDao getDao(){
return new UserDao();
}
}
- 目的:耦合度还可降低
IOC解耦过程
xml配置文件,配置创建的对象
<bean id = "own" class = "com.own.UserDao"></bean>有service类和dao类,创建工厂类
class UserFactory{
public static UserDao getDao(){
String classValue = class属性值; // 1.xml解析
Class clazz = Class.forName(classValue); // 2.通过反射创建对象
retuen (UserDao) clazz.newInstance();
}
}
- 进一步降低耦合度
IOC(接口)
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
Spring提供IOC容器实现两种方式:(两个接口)
- BeanFactory:IOC容器基本实现,是SPring内部的使用接口,比提供开发人员进行使用
- 加载配置文件的时候不会创建对象,在获取(使用)对象时才去创建对象
- ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
- 加载配置文件时就创建对象
- ApplicationContext接口实现类(主要两个)
FileSystemXmlApplicationContext (磁盘路径)
ClassPathXmlApplicationContext (相对路径)
//xml配置文件
<bean id = "user" class = "com.own.User"></bean>
//Java类
public void test(){
//1. 加载spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//2. 获取配置创建的对象
User user = context.getBean("user",User.class);
}
IOC操作Bean管理(概念)
- 什么是Bean管理?
- Bean管理指的是两个操作
- Spring创建对象
- Spring注入属性
- Bean管理操作有两种方式
- 基于xml配置文件方式实现
- 基于注解方式实现
IOC操作Bean管理(基于xml方式)
- 基于xml方式创建对象
<bean id = "user" class = "com.own.user"></bean>
- 在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
- 在bean标签中有很多属性,介绍常用的属性
- id属性:唯一标识
- class属性:类全路径(包类路径)
- 创建对象时,默认执行无参数构造方法完成对象创建
- 基于xml方式注入属性
- DI:依赖注入,就是注入属性
第一种注入方式:使用set方法注入
public class Book{
//1. 创建属性
private String bname;
//2. 创建属性对应的set方法
public void setBname(String bname){
this.bname = bname;
}
public void say(){
System.out.println("===>"+bname);
}
}
//3. xml进行配置
<bean id = "book" class = "com.own.Book">
<property name = "bname" value = "zhangsan"><property>
</bean>
//4. 测试
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Book book = context.getBean("book",Book.class);
System.out.println(book);
book.say();
}
//原始方法:对象调用set方法
public static void main(String[] args){
Book book = new Book();
book.setBname("abc");
}
第二种注入方式:使用有参构造方法注入
public class Book{
//1. 创建属性
private String bname;
//2. 创建属性对应的有参构造方法
public Book(String bname){
this.bname= bname;
}
public void say(){
System.out.println("===>"+bname);
}
}
//3. xml进行配置
<bean id = "book" class = "com.own.Book">
//第一种方式:指定name
<constructor-arg name="bname" value="lee"><constructor-arg>
//第二种方式:下标法
<constructor-arg index="0" value="lee"><constructor-arg>
</bean>
//4. 测试
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Book book = context.getBean("book",Book.class);
System.out.println(book);
book.say();
}
//原始方法
public static void main(String[] args){
Book book = new Book("abc");
}
第三种注入方式:p名称空间注入(了解)
- 可以简化基于xml配置方式
// 1. 添加p名称空间在配置文件中
<beans xmlns:p="http://www.springframework.org/schema/p">
//2. 进行属性注入,在bean标签里面进行操作,底层还是set注入
<bean id = "book" class="com.own.Book" p:name="wanger"></bean>
</beans>
Spring学习日记01_IOC_xml的三种注入方式的更多相关文章
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- spring ioc三种注入方式
spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...
- Spring IOC 三种注入方式
1. 接口注入 2. setter注入 3. 构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...
- Spring IOC以及三种注入方式
IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...
- Spring IOC 中三种注入方式
项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样 ...
- Spring事务Transaction配置的五种注入方式详解
Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
- .NetCore中三种注入方式的思考
该篇内容由个人博客点击跳转同步更新!转载请注明出处! .NetCore彻底诠释了"万物皆可注入"这句话的含义,在.NetCore中到处可见注入的使用.因此core中也提供了三种注入 ...
- Spring的三种注入方式(Setter、构造函数和自动注入)
一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...
- Spring IOC 三种注入方式(构造器,setter,接口)
Spring的依赖注入有三种方式: 1,构造器注入 2,setter注入 3,接口注入 下面我给大家介绍一下这三种注入 1.构造器注入 构造器注入主要是依赖于构造方法去实现,构造方法可以是有参也可以是 ...
随机推荐
- 我写了一个简单的JSON序列化和反序列化的工具
背景 互联网上有许多可用的Json序列化和反序列化的工具,例如fastjson,jackson,Gson等等,那么,我为什么还要自己写一个? 项目不方便依赖其他第三方库.比如有时候我们编写SDK,考虑 ...
- [bug] maven“1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符”
原因 maven打包默认采用jdk 1.5,无法识别<> 解决 在pom.xml中加入: <properties> <maven.compiler.source>1 ...
- Linux中find命令用法全汇总,看完就没有不会用的!
Linux中find命令用法全汇总,看完就没有不会用的! 中琦2513 马哥Linux运维 2017-04-10 糖豆贴心提醒,本文阅读时间7分钟 Linux 查找命令是Linux系统中最重要和最 ...
- Ansible_编写Playbook文件
一.Playbook的实施 1.Ansible playbook与临时命令概述: 临时命令可以作为一次性命令对一组目标主机运行一项简单的任务 play是针对清单中选定的主机运行的一组有序任务.play ...
- pgrep cron
# pgrep cron947[root@localhost cron]# pgrep --help Usage: pgrep [options] <pattern> Options: - ...
- shell进阶之tree、pstree、lsof命令详解
一.tree命令详解: 主要功能是创建文件列表,将所有文件以树的形式列出来 -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩, ...
- Lua _G
1.全局变量的原形 在Lua中,要声明全局变量很简单,那就是定义变量的时候,前面不要加上local. 这个神秘的全局变量,其实本质上也是一个table,它把我们创建的全局变量都保存到一个table里了 ...
- 3.21-22 od、tee
3.21 od:按不同进制显示文件 od命令用于输出文件的八进制.十六进制或者其他格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符. -A 地址进制 按指定的进制 ...
- Django(35)Django请求生命周期分析(超详细)
Django请求生命周期分析 1.客户端发送请求 在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都 ...
- 基于python内置方法进行代码混淆
0x00 动态加载模块 在python脚本中,直接使用import os.import subprocess或from os import system这种方法很容易被规则检测,即使使用其它执行命令的 ...