内容简介:OC是典型的工厂模式,通过工厂去注入对象。AOP则是代理模式的体现。IOC也叫控制反转,首先从字面意思理解,什么叫控制反转?反转的是什么?
- 本作品采用 知识共享署名 4.0 国际许可协议 进行许可。
- 感谢: Java大联盟
- 本文作者:低调小熊猫
- 文章链接: https://aodeng.cc/archives/springyi
- 转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032
Spring IOC-1
本文属于学习笔记,非教程,再次感谢 Java 大联盟
Spring的两大核心机制是IOC(控制反转)和AOP(面向切面编程),从开发的角度讲,我们使用Spring框架就是用它的IOC和AOP。
OC是典型的工厂模式,通过工厂去注入对象。
AOP则是代理模式的体现。
IOC也叫控制反转,首先从字面意思理解,什么叫控制反转?反转的是什么?
在传统的程序开发中,需要调用对象时,通常由调用者来创建被调用者的实例,即对象是由调用者主动new出来的。
但在Spring框架中创建对象的工作不再由调用者来完成,而是交给IOC容器来创建,再推送给调用者,整个流程完成反转,所
以是控制反转。
通过IOC容器来创建对象
无参构造
spring.xml
<!-- 配置student对象--> <bean id="stu" class="实体类包路径"></bean>
main
//1.加载spring.xml配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); //2.通过id值获取对象 Student stu = (Student) applicationContext.getBean("stu"); //3.通过运行时类获取对象 Student stu = applicationContext.getBean(Student.class);
spring中给实体类赋值
<!-- 配置student对象 --> <bean id="stu" class="实体类包路径"> <property name="实体类属性1" value="1"></property> <property name="实体类属性2" value="张三"></property> <property name="实体类属性3" value="23"></property> <!--特殊字符赋值eg:name="<张三>"--> <property name="name"> <value><![CDATA[<张三>]]></value> </property> </bean>
有参构造
name的值需要与有参构造的形参名对应,value是对应的值。
除了使用name对应参数外,还可以通过下标index对应。
<!-- 通过有参构造函数创建对象 --> <bean id="stu3" class="com.hzit.entity.Student"> <constructor-arg name="id" value="3"></constructor-arg> <constructor-arg name="name" value="小明"></constructor-arg> <constructor-arg name="age" value="22"></constructor-arg> </bean> <!-- 通过有参构造函数创建对象 --> <bean id="stu3" class="com.hzit.entity.Student"> <constructor-arg index="0" value="3"></constructor-arg> <constructor-arg index="1" value="小明"></constructor-arg> <constructor-arg index="2" value="22"></constructor-arg> </bean>
IOC容器管理多个对象,并且对象之间有级联关系实现
实体类
public class Student { private int id; private String name; private int age; private Classes classes; }
spring.xml中配置classes对象,然后将该对象赋值给stu对象。
<!-- 创建classes对象 --> <bean id="classes" class="com.hzit.entity.Classes"> <property name="id" value="1"></property> <property name="name" value="Java班"></property> </bean> <!-- 创建stu对象 --> <bean id="stu" class="com.hzit.entity.Student"> <property name="id" value="1"></property> <property name="name"> <value><![CDATA[<张三>]]></value> </property> <property name="age" value="23"></property> <!-- 将classes对象赋给stu对象 --> <property name="classes" ref="classes"></property> </bean>
在spring.xml中,通过ref属性将其他bean赋给当前bean对象,这种方式叫做依赖注入(DI),
是Spring非常重要的机制,DI是将不同对象进行关联的一种方式,是IOC的具体实现方式,
通常DI和IOC是紧密结合在一起的,所以一般说的IOC包括DI。
集合属性依赖注入
public class Classes { private int id; private String name; private List<Student> students; }
spring.xml中配置2个student对象,1个classes对象,并将2个student对象注入到classes对象中。
<!-- 配置classes对象 --> <bean id="classes" class="com.hzit.entity.Classes"> <property name="id" value="1"></property> <property name="name" value="Java班"></property> <property name="students"> <!-- 注入student对象 --> <list> <ref bean="stu"/> <ref bean="stu2"/> </list> </property> </bean> <bean id="stu" class="com.hzit.entity.Student"> <property name="id" value="1"></property> <property name="name"> <value><![CDATA[<张三>]]></value> </property> <property name="age" value="23"></property> </bean> <bean id="stu2" class="com.hzit.entity.Student"> <property name="id" value="2"></property> <property name="name" value="李四"></property> <property name="age" value="23"></property> </bean>
集合属性通过list标签和ref标签完成注入。ref的bean属性指向需要注入的bean对象。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【每日笔记】【Go学习笔记】2019-01-04 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-02 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-07 Codis笔记
- Golang学习笔记-调度器学习
- Vue学习笔记(二)------axios学习
- 算法/NLP/深度学习/机器学习面试笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。