SpringIOC

SpringIOC

作用: 实现了层与层之间对象的逻辑性的解耦.IOC将耦合性非常高的对象进行解耦.

SpringIOC创建对象的三种方式

1.通过构造器方式

①无参数构造器(创建一个没有初始化数据的对象)
②有参 数构造器(创建一个带有初始化数据的对象)

Applicationcontext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--创建student的bean对象--><!--构造器方式--><!--无参构造器 特点:Spring容器默认使用无参构造方式创建对象使用:在配置文件中直接使用bean标签配置即可,无需过多声明--><bean id="stu" class="com.bjsxt.pojo.Student"></bean><!--有参数的构造器特点:Spring容器对根据配置调用的有参构造器创建一个带有初始化数据的对象使用:constructor-arg:使用bean的字标签来声明调用的构造器的形参的个数一个字标签表示一个参数属性:index:参数的下标type:参数的类型,全限定路径name:参数的形参名value:参数要给的值--><bean id="stu2" class="com.bjsxt.pojo.Student"><constructor-arg index="0" type="java.lang.Integer" name="sid" value="1"></constructor-arg><constructor-arg index="1" type="java.lang.String" name="sname" value="张三"></constructor-arg></bean></beans>

TestObject.java

package com.java.controller;import com.java.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class testStu {public static void main(String[] args) {//创建容器对象ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");//获取容器中的对象//无参构造器方式Student student = (Student) ac.getBean("stu");System.out.println("无参构造:"+student);//有参构造器Student student1= (Student) ac.getBean("stu2");System.out.println("有参构造:"+student1);}
}

2.通过属性注入(get/set)

ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--创建student的bean对象--><!--属性注入方式特点:相当于创建一个空对象然后使用set方法赋值使用:property:在bean标签下使用子标签property,表示调用set方法给某个属性赋值属性:name:要赋值的属性名value:值--><bean id="stu3" class="com.bjsxt.pojo.Student"><property name="sid" value="2"></property><property name="sname" value="李四"></property></bean>
</beans>

TestObject.java

package com.java.controller;import com.java.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class testStu {public static void main(String[] args) {//创建容器对象ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");//获取容器中的对象//属性注入方式Student student = (Student) ac.getBean("stu3");System.out.println("属性注入方式"+student);}
}

3.通过工厂模式

①动态工厂模式
②静态工厂模式

applicationcontext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--创建student的bean对象--><!--工厂设计模式--><!--动态工厂--><bean id="factory" class="com.bjsxt.pojo.StudentFactory"></bean><!--生产Student对象--><bean id="stu4" factory-bean="factory" factory-method="newIntance"></bean><!--静态工厂--><!--可以理解为静态方法直接用类名调用--><bean id="stu5" class="com.bjsxt.pojo.StudentFactory2" factory-method="newIntance"></bean>
</beans>

TestObject.java

package com.java.controller;import com.java.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class testStu {public static void main(String[] args) {//创建容器对象ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");//获取容器中的对象//工厂设计模式     //动态工厂Student student = (Student) ac.getBean("stu4");System.out.println("动态工厂:"+student);//静态工厂Student student1 = (Student) ac.getBean("stu5");System.out.println("静态工厂:"+student1);}
}

IOC的依赖注入DI

依赖责任链:

对象之间项目依赖形成的一条链式依赖关系.
D d=new D();
C c=new C(d)
B b=new B©;
A a=new A(b);
A<—B<----C<----D

解决:
让Spring容器根据对象之间的依赖关系,将依赖责任连上的所有的对象全部配置为Bean对象.并且根据依赖关系完成对象之间的组装.将组装好的对象返回给用户使用.

概念:
DI:依赖注入,就是Spring容器根据对象之间的依赖关系完成对象的创建以及组装的过程.

applicationcontext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--
DI依赖的使用流程
①将依赖责任链上的所有的对象都配置为bean
②根据依赖关系完成对象之间的组装配置通过构造器方式:i.必须在类中声明对应的构造器ii.在bean标签下使用constructor-arg子标签完成以来注入使用constructor-arg的属性ref,ref的值为要注入的bean的ID通过set方法方式i.必须在类中声明引用属性对应的set方法ii.在bean标签下使用property子标签完成以来注入在property子标签中使用ref属性,属性值为要被注入的bean的ID
--><!--配置学生bean对象--><bean id="stu" class="com.bjsxt.pojo.Student"><!--构造器方式--><constructor-arg index="0" name="teacher" type="com.bjsxt.pojo.Teacher" ref="tea" ></constructor-arg><!--set方式--><property name="teacher" ref="tea"></property><property name="sname" value="张三"></property><property name="sid" value="1"></property></bean><bean id="tea" class="com.bjsxt.pojo.Teacher"><property name="tid" value="2"></property><property name="tname" value="刘老师"></property></bean>
</beans>

TestIocDI.java

package com.java.contorller;import com.java.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIocDI {public static void main(String[] args) {//获取spring对象ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");Student stu = (Student) ac.getBean("stu");System.out.println(stu);stu.testStu();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隐马尔科夫模型-前向算法

转载自 隐马尔科夫模型-前向算法 隐马尔科夫模型-前向算法 在该篇文章中讲了隐马尔科夫模型&#xff08;HMM&#xff09;一基本模型与三个基本问题 隐马尔科夫模型-基本模型与三个基本问题&#xff0c;这篇文章总结一下隐马尔科夫链&#xff08;HMM&#xff09;中的前向与后…

线段树初见——区间询问与改变最大值

前言 昨天某B组讲主席树&#xff0c;然后就作死的去听了&#xff0c;也没听懂&#xff08;因为连线段树都不懂&#xff09;&#xff0c;然后好奇心就去问了一下老师线段树是个蛤&#xff0c;然后这篇博客就诞生了。 正题 首先线段树就是一个可以快速区间改变和询问的东东&am…

关系数据库理论

依赖 候选码 三大范式 公理系统 求最小函数的依赖集 例 解 模式分解

SpringMVC支持ant风格的路径

&#xff1f;&#xff1a;表示任意的单个字符 *&#xff1a;表示任意的0个或多个字符 **&#xff1a;表示任意的一层或多层目录 注意&#xff1a;在使用**时&#xff0c;只能使用/**/xxx的方式

19级:班级日常分享 | 一天一瞬间

点击上方蓝色关注我们&#xff01;昨天没有看到他们早读&#xff0c;有点失落。今天再一次去教室&#xff0c;还未走到门口呢&#xff0c;就听见教室里面的早读生透过门缝传出&#xff0c;甚是开心。在陪他们早读的时候&#xff0c;自己顺便读了几篇散文和古诗古文&#xff0c;…

在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

前言 Visual Studio 2017已经发布了很久了。做为集成了Asp.Net Core 1.1的地表最强IDE工具&#xff0c;越来越受.NET系的开发人员追捧。 随着Google Angular4的发布。我一直在想&#xff0c;怎么能够用这个地表最强IDE工具编写Angular4的Asp.Net Core项目。经过不懈的研究。终…

机器学习中向量化编程总结记录

转载自 机器学习中向量化编程总结记录 向量化编程总结记录 很多时候&#xff0c;我们在实现算法的时候&#xff0c;总会碰到累和的伪代码&#xff1a; 比如下面这个&#xff1a; 为了简单我这里只重复5次&#xff0c;但是原理是一样的。 很显然我们要得到这个结果&#xf…

Spring整合Mybatis-完成用户登录

①导入的jar包: ②在src下创建并配置applicationcontext.xml文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

【jzoj】2018.2.7NOIP普及组——某【BC】组模拟赛

前言 ……终于改完了&#xff0c;像之前小L一样崩溃。今天C组和B组一起做题&#xff0c;所以…… 正题 题目1&#xff1a;教主的花园&#xff08;jzoj1792&#xff09; 一平面直角坐标系&#xff0c;在x轴的位置建立一堵墙&#xff0c;墙上有n道门&#xff0c;给出门的位置&a…

解决获取请求参数的乱码问题

解决获取请求参数的乱码问题&#xff0c;可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter&#xff0c;但是必须在web.xml中进行注册 <!--配置springMVC的编码过滤器--> <filter><filter-name>CharacterEncodingFilter</filter-name><fi…

刘奕佳: 我的职校新生活 | 班级日常分享

点击上方蓝色关注我们&#xff01;时光匆匆&#xff0c;一转眼到了开学季&#xff0c;校园里弥漫着浓重的书香之气踏入校园&#xff0c;映入眼帘的就是雄伟的教学楼&#xff0c;意气风发的朗朗书声&#xff0c;让人情不自禁的陷入深深的学习中。实训楼当熟悉的上下课铃声又在我…

一个非常好的依存句法可视化工具

转载自 一个非常好的依存句法可视化工具 一个非常好的依存句法可视化工具 在依存句法研究中&#xff0c;常见的CONLL格式的句法树库&#xff0c;一眼看上去就不是太明白整棵树的结构。 这里分享推荐一个南京大学nlp实验室制作的一个依存句法可视化工具&#xff0c;效果如图…

DDD理论学习系列(8)-- 应用服务amp;amp;领域服务

1. 引言 单从字面理解&#xff0c;不管是领域服务还是应用服务&#xff0c;都是服务。而什么是服务&#xff1f;从SOA到微服务&#xff0c;它们所描述的服务都是一个宽泛的概念&#xff0c;我们可以理解为服务是行为的抽象。从前缀来看&#xff0c;根据DDD的经典分层架构&…

SpringIOC的创建对象的单例多例模式和自动注入

[1] SpringIOC创建对象的单例和多例模式 问题: Spring容器对象根据配置文件创建对象的时机默认发生在Spring容器对象在被创建的时候,也就是说,我们一旦获取到Spring容器对象,意味着可以直接获取Spring容器中的对象使用了.那么,如果我对同一个bean对象,连续获取N次,获取到的是不…

纪念中学15-5(=10)天感想

来自水lao ten days の 感想 前言 时光飞逝&#xff0c;转眼间&#xff0c;纪念中学的10天生活就那么过去了。回想起刚来&#xff0c;仿佛就在昨天。今天我将要离开这里&#xff0c;总感觉有无限的遗憾&#xff0c;无限的失落。可是花朵总是要谢&#xff0c;时光不停流逝。我…

祝张远远和杨凯博同学生日快乐 | 班级日常分享

点击上方蓝色关注我们&#xff01;首先祝张远远和杨凯博同学生日快乐&#xff01;上午丁老师和我说&#xff0c;今天是张远远同学的生日&#xff0c;于是我们就简单的商量了下&#xff0c;准备弄个活动&#xff0c;祝一下张远远同学生日快乐&#xff01;待下午时&#xff0c;获…

开放对静态资源的访问

前端控制器先进行处理&#xff0c;处理不了的交给default… 缺一不可

通俗理解维特比算法

转载自 通俗理解维特比算法 本文假定读者有一定的隐马模型基础&#xff01;或者大家可以参考这两篇文章。 隐马尔科夫模型-基本模型与三个基本问题和隐马尔科夫模型-前向算法 维特比算法说白了就是动态规划实现最短路径&#xff0c;只要知道“动态规划可以降低复杂度”这一…

ssl1125-集合【哈希表二分查找+快排】

前言 今天学哈希表&#xff0c;然后就第一节晚修赶快写完作业就上了做题了&#xff0c;然后就做完了这道题get√。 正题 题目 给出两个集合&#xff1a; A是B的一个真子集&#xff0c;输出“A is a proper subset of B” B是A的一个真子集&#xff0c;输出“B is a proper …

使用docker-compose搭建AspNetCore开发环境

1 使用docker-compose搭建开发环境 我们的目标很简单&#xff1a;使用docker-compose把若干个docker容器组合起来就成了。 首先使用Nginx代理所有的Web程序&#xff0c;这样只需要在主机上监听一个端口就可以了&#xff0c;不污染主机。再组合各Web程序、Redis/Memcached、Sq…