重庆免费推广网站,在线开发培训网站建设,什么网站可以做饼图,广东网络营销服务Spring学习笔记2 Spring的入门程序_biubiubiu0706的博客-CSDN博客 控制反转是一种思想
控制反转是为了降低程序耦合度,提高程序扩展力,达到OCP(开闭原则)原则,达到DIP(依赖倒置原则)原则
控制反转,反转的是什么?
1.将对象的创建权力交出去,交给第三方容器负责
2.对象与对象…Spring学习笔记2 Spring的入门程序_biubiubiu0706的博客-CSDN博客 控制反转是一种思想
控制反转是为了降低程序耦合度,提高程序扩展力,达到OCP(开闭原则)原则,达到DIP(依赖倒置原则)原则
控制反转,反转的是什么?
1.将对象的创建权力交出去,交给第三方容器负责
2.对象与对象之间关系的维护权交出去,交给第三方容器负责
控制反转这种思想如何实现----DI依赖注入 一句话:通过DI依赖注入实现IOC控制反转 控制反转是思想,依赖注入是实现 依赖注入常见方式2种
1.Set注入
2.构造注入 新建模块时候报错,看样子IDEA也要更新了 引入依赖 dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion6.0.10/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependency!--Log4j2依赖--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.19.0/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion2.19.0/version/dependency
/dependencieslog4j2.xml ?xml version1.0 encodingUTF-8?
configurationloggers!--level指定⽇志级别从低到⾼的优先级ALL TRACE DEBUG INFO WARN ERROR FATAL OFF--root levelDEBUGappender-ref refspring6log//root/loggersappenders!--输出⽇志信息到控制台--console namespring6log targetSYSTEM_OUT!--控制⽇志输出的格式--PatternLayout pattern%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n//console/appenders
/configuration Spring配置文件 ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd/beans 1.Set注入,基于set方法实现,底层会通过反射机制调用属性对应的set方法然后给属性赋值.这种方式要求属性必须对外提供set方法 使用IDEA生成的set方法 搞清楚 Set注入本质 找不到setvipdao的方法 原因是Set注入 name是set方法名,取掉set首字母转小写才行 依赖注入之构造方法注入
set注入,先要有对象,对象执行set方法
而构造注入是创建对象的同时,给属性赋值 注入的时机不一样 业务层新建一个类 新建一个beans2.xml演示构造方法注入 测试 上面用下标指定参数,也可以用name 参数名字指定 还可以不指定下标,也不指定参数名,让Spring自己做类型匹配 构造注入和Set注入,一般set注入相对较多 set注入专题:(必须提供set方法) 1.注入外部Bean和注入内部bean
新建个Spring配置文件 取名set-di.xml专配用于set注入
新建个OrderDao
新建个OrderService 此种方式就是外部bean ref引入 日志太多可以
调整下 演示内部bean
在property标签中使用嵌套bean就叫内部bean 测试 2.set注入,注入简单类型
原先通过set方法注入的是OrderDao 引入类型
下面看下 简单类型的注入 新建一个类 提供set方法 和toString方法 在Spring配置文件 set-di里配置 测试 那么所谓的简单类型包括什么呢,哪些是简单类型
Spring中有个工具类 双击SHIFT 或者 CTRLN 搜索 BeansUtils 按ALT7 可以看到这个类里所有方法
查看isSimpleValueType这个方法 这个方法就是Spring判定是否是简单类型的方法 测试几个简单类型 定义个枚举 测试new Date()的输出格式 Sat Sep 23 00:41:46 CST 2023 都提供相应的set方法 提供toString方便输出看值 在set-di.xml里配置 测试 set注入简单类型的经典应用
举例:数据源,DataSource 测试 set注入之级联属性赋值 创建两个类测试 配置 测试 上面并不是所谓的级联属性赋值 set方法注入数组(数组里面可能是简单类型,也可能不是简单类型) 先演示数组里面是简单类型 演示数组里面不是简单类型
新建类 Person添加属性并重写set方法 toString只为输出时候看的方便 测试 set注入List和Set集合 set注入List集合
新建类 测试 Set注入Map集合 注意:如果Map的key value不是简单类型的配置 Map还有一个特殊的类Properties 继承Hashtable set注入 注入null和空字符串 set注入 注入特殊字符 xml中有5个特殊符号,分别是: 大于号 小于号 单引号 双引号 与 实体符号代替特殊符号 对照表 set注入 p命名空间注入也是基于set方法
注意:P空间注入底层还是set注入,只不过P命名空间注入可以让Spring配置变得更简单
新建类 新建配置文件spring-p.xml C命名空间注入 是为了简化构造注入
新建类 新建配置文件 可以用简单注入 也可以用ref util命名空间让配置复用 使用util命名空间可以让配置复用
使用util命名空间的前提是:在Spring配置文件头部添加配置信息. 所谓的配置复用 新建两个类 原先的配置方式 但是重复 用util命名空间让配置复用 简写后 测试 基于XML的自动装配(无论是byName还是byType都是基于set方法的)
Spring还可以完成自动化注入,自动化注入又称为自动装配,它可以根据名字进行自动装配,也可以根据类型进行自动装配 根据名称自动装配 以OrderDao和OrderService演示 新建个配置文件 spring-autowire.xml 原先的写法 测试 自动装配 byName测试 如果是Idea工具自动生成set方法,那么就是和变量名相同(关键严格记住set方法名去掉set首字母小写)
被注入的对象,被注入的对象 基于XML自动装配 byType
下面用Customer演示 添加无参构造 和set方法 注意 byType的话 如果类型有两个 会报错
比如 引入外部属性配置文件 比如现在有个类,类里属性来自于属性配置文件 创建jdbc.properties 新建个配置文件 spring-properties 引入外部文件写法 为什么出现这种情况原因: ${user} Spring默认去读到的是系统配置的 因此,建议加前缀