IOC容器到底是什么解决方法

发布网友 发布时间:2022-04-21 01:07

我来回答

1个回答

热心网友 时间:2022-06-17 00:25

依赖注入和反转控制
是spring的核心

1.java实例的调用者创建被调用的java实例,调用者直接new关键字创建被调用实例,程序高度耦合
2.调用者无需关心被调用者的具体实现过程,只需要找到符合某种标准的实例,即可使用,此时调用的代码面向接口编程,可以让调用者和被调用者解耦合,是是工厂模式大量使用的原因.但是调用者需要自己定位工厂,调用者和工厂耦合在一起
3.最理想的情况,程序完全无需要理会被调用者的实现,也无须定位工厂,是最好的解耦合的方法,实例之间的依赖关系由容器提供.
也就是靠spring来管理,用配制文件来管理实例直接的关系,如果遇到某个需要修改的需求,只需要修改相应的配制文件,而不需要修改每个类中对相应需要修改类的方法的实例话

现在开始面向接口编程,减少各个层之间的耦合
先创建一个接口
再创建一个类继承接口
在spring的xml对相应的类进行配制
//这是struts+spring的例子,随便写的
底下的ref指向配制文件中另外一个声明类
<bean name="/login"
class="com.ccsee.em.struts.action.login.UserLoginAction">
<property name="userS" ref="userInfoService" />
<property name="popedomS" ref="popedomService" />
</bean>
<bean id="userInfoService"
class="com.ccsee.em.service.impl.UserInfoServiceImpl">
<property name="userDao" ref="userDao" />
</bean>
这是action中的代码,初始话相应的接口,UserInfoService 是一个接口,通过配制文件指向相应的类
private UserInfoService userS;

public void setUserS(UserInfoService userS) {
this.userS = userS;
}
以前下的时候要想使用,service层中的UserInfoService的方法就必须,先初始话
UserInfoService userS = new UserInfoServiceImpl();
才能使用userS.***方法,这样如果UserInfoServiceImpl中的方法需要更改,你需要改动的地方就是,程序中所有UserInfoService userS = new UserInfoServiceImpl();

都需要修改

现在private UserInfoService userS;

public void setUserS(UserInfoService userS) {
this.userS = userS;
}
这是设值注入,只要在相应的类和配制文件中进行初始话,就把2个类连接起来,
说的乱七八糟,自己学spring一个月,也就懂这些,
一个设值注入一个构造注入,通过配制文件来连接各层之间的关系
spring不止这些,对一些权限控制和事务控制有自己的处理方法,不知道我说的对不对
初学,个人认为spring的ioc在解耦合方面发挥重要作用吧,其他的不清楚,慢满研究.
自己转晕了,一起学习

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com