Spring之IOC思想、IOC创建对象方式、IOC常见配置

IOC和DI:
IOC,中文翻译为控制反转,是一种设计思想。而DI,中文翻译为依赖注入,则是IOC的一种实现方法。注意!很多人喜欢把IOC和DI混为一谈,其实不是这样的,IOC是一种设计思想,而DI,则只是实现这种思想的一种方式,一个是思想,一个是行为。同一个思想可以由不同行为实现,不用DI,IOC同样也可以由其他方式实现。
IOC思想:
所谓控制反转,控制的是什么?反转的又是什么?这是这个概念最需要搞明白的地方。
控制的是什么?其实,控制的是对象的创建。在传统的JavaSE面向对象的编程中,对象的创建由程序员完成,写死在程序中,这样做的弊端,就是程序的耦合太高,创建对象的过程被写死在程序中,一旦需求改变,对象需要改动,就需要频繁修改代码。
那反转的是什么?其实是对象的创建者,控制反转后,对象的创建移交给第三方,也就是交给客户需求,不再需要程序员写死在程序中,由客户需求动态改变来创建对象,因此,要实现不同的操作,只要在xml配置文件中进行修改,对象由Spring创建、管理、装配。

IOC创建对象的方式:
Spring在配置文件加载时,会为每个对象创建一个实例,且默认使用无参构造器创建实例。这个本人经过验证,在每个对象的无参构造器中打印一句话,就可以验证,结果表明,就算没有调用某个实例,实例的无参构造器仍然被执行了。并且,Spring默认使用单例模式,为每个对象只创建一个实例,用getBean()方法返回两个参数,比较两个参数,结果为true,他们是同一个池中的同一个对象。当然,也可以在xml中修改不使用默认的单例模式。
如果想使用有参数的构造器创建对象:
1.直接通过参数名称配置

<bean id="..." class="类的路径">
<constructor-arg name="构造器中参数名" value="定义的值"/>
<bean>`

2.下标赋值

<bean id="..." class="类的路径">
<constructor-arg index="0" value="定义的值"/>
<bean>`

3.通过类型创建(多个相同类型时不能用)

<bean id="..." class="类的路径">
<constructor-arg type="java.lang.string" value="定义的值"/>
<bean>`

Spring的常见配置:
1.bean
id为Spring帮你创建出来的对象的名称。class为类的路径。name为别名,可以有多个,相当于可以根据别名获取对象,不依靠id了。property中,name为属性名,就是你在类中定义的属性,value为你给这个属性赋的值。
注意:property中,赋值默认调用set方法。 也就是说,想让spring帮你创建对象并赋值,必须类中有该属性的set方法。
ref也是赋值语句,只不过,ref是赋值对象,value是赋值具体值,一般用在基本数据类型上,ref用在引用类型,ref的作用,是把spring中其他已经定义的对象赋值过来。

<bean id="redis" class="com.dao.RedisImpl" name="别名">
		<property name="name" value="redis"></property>
</bean>

<bean id="userServiceImpl" class="com.service.UserServiceImpl">
        <property name="userDao" ref="别名"></property>
</bean>

单例模式创建bean(Spring默认机制,scope可以不写,默认单例)

<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>

原型模式创建bean,每次从容器get,都会产生一个新对象

<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>

2.别名(没啥用,只能取一个别名,还没bean中的name属性好用)

<alias name="旧名" alias="别名">

3.import:一般用于团队开发使用,可以将多个配置文件,导入合并为一个。

<import resource="bean1.xml">
<import resource="bean2.xml">
<import resource="bean3.xml">
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值