标签:ram 修改 version 第三方 生产 oid map容器 生命周期 总结
遇见,拉着你的手,无论是在哪里,我都感觉像是朝天堂奔跑,你相信么?
Spring有IOC和AOP两个核心。其中IOC就是我们说的控制反转,也就是将创建对象并生命周期管理过程交给Spring处理,在开发中不再需要关注对象的创建和生命周期的管理,需要时由Spring框架提供,这个由Spring管理创建对象和生命周期的机制称为控制反转。创建对象的权力转给框架,他帮我们创建,我们不再使用new关键字来创建对象
在初始化一个Spring容器时,Spring会解析Spring的配置文件(applicationContext.xml),从上到下解析到
当通过context.getBeans("id值")
方法来从容器中获取对象时,根据id从内置的map中寻找是否有匹配的键值,如果有则返回对象,如果没有则抛出异常
注意:默认情况下,多次获取同一id的bean对象得到的是同一个对象(默认情况下创建的对象是单例的,如果需要多例可以在该标签中设置多例)。如果使用一个类配置多个
控制反转IOC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方式,也有人认为DI只是IOC的另一种说法。没有IOC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的母的
控制反转是一种通过描述(XML或注解)并通过第三方去生产和获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方式是依赖注入(Dependency Injection,DI)
思考:
这个过程就叫控制反转:
依赖注入:就是利用set方法来进行注入的
IOC是一种编程思想,由主动的编程变成被动的接收
通过newClassPathXmlApplicationContext浏览底层源码
<?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">
<bean id="MysqlImpl" class="com.xiaohua.dao.impl.UserDaoMySqlImpl"/>
<bean id="OracleImpl" class="com.xiaohua.dao.impl.UserDaoOracleImpl"/>
<bean id="ServiceImpl" class="com.xiaohua.service.impl.UserServiceImpl">
<!--注意: 这里的name并不是属性 , 而是set方法后面的那部分 , 首字母小写-->
<!--引用另外一个bean , 不是用value 而是用 ref-->
<property name="userDao" ref="OracleImpl"/>
</bean>
</beans>
测试:
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl serviceImpl = (UserServiceImpl) context.getBean("ServiceImpl");
serviceImpl.getUser();
}
OK,到了现在,我们彻底不用在程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的IOC,一句话搞定:对象由Spring来创建、管理、装配
使用无参构造创建对象,默认
假设我们要使用有参构造创建对象
下标赋值
<!--第一种,下标赋值-->
<bean id="user" class="com.xiaohua.pojo.User">
<constructor-arg index="0" value="黄大姐你好"/>
</bean>
通过类型赋值
<!--第二种方式:通过类型创建,不建议使用-->
<bean id="user" class="com.xiaohua.pojo.User">
<constructor-arg type="java.lang.String" value="黄二姐"/>
</bean>
通过属性名赋值
<!--第三种,直接通过参数名实现赋值-->
<bean id="user" class="com.xiaohua.pojo.User">
<constructor-arg name="name" value="黄三姐"/>
</bean>
总结:在配置文件加载的时候,容器中管理的对象就已经初始化了
标签:ram 修改 version 第三方 生产 oid map容器 生命周期 总结
原文地址:https://www.cnblogs.com/huangdajie/p/12463374.html