Spring入门之IOC和DI

初学Spring,首先接触的就是IOC(控制反转)和DI(依赖注入)。那什么是IOC和DI呢?

Spring框架的一些jar包

需要的一些jar包
这里面后面四个包是Spring的核心jar包。前两个是处理java日志的,我也是个初学者,也不太明白他的作用。

IOC

IOC:控制反转,将创建对象的能力交给Spring
我们先定义一个接口UserService 然后再实现这个接口UserServiceImpl

public interface UserService {
	public void save();
}
public class UserServiceImpl implements UserService {

	@Override
	public void save() {
		// TODO Auto-generated method stub
		System.out.println("方法已经被执行...");
	}
}

我们再写一个测试类 来实现这个方法(整个测试类就不贴上来了,把方法贴上来)

public void demo1() {
		UserService userService = new UserServiceImpl();
		userService.save();
	}

我们在demo1这个方法里面,我们先是面向接口编程,新建了一个UserServiceImpl的对象
然后调用类里面save方法
我们可以看到,接口和实现类是耦合的,如果我们更改了业务,我们就必须修改测试类里面的代码
但如果我们使用ioc,我们就可以解耦,将创建对象的过程交给Spring,这个过程是由一个BeanFactory来实现的

上面是传统的方法,下面我们使用ioc来实现

配置文件:applicationContext.xml (一般Spring的配置文件都是这个名字)

<?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="UserService" class="com.spring.demo1.UserServiceImpl">
    </bean>

</beans>

配置文件里面 bean 标签就是将实现类UserServiceImpl命名为UserService

public void demo2() {
		// 创建spring的工厂 并且在工厂中加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		// 使用配置文件 创建对象
		UserService userService = (UserService) applicationContext.getBean("UserService");
		userService.save();
	}

如果我们需要更改业务,我们则不需要更改源代码,我们只需要把配置文件中bean标签中的class换成需要更改的那个class。因为我们是通过配置文件来更改创建的对象的。

DI

DI:依赖注入,必须拥有IOC的环境,Spring管理类的时候将类的依赖的属性注入进来。
我们现在更改实现类,在save中输出一个成员变量name

public class UserServiceImpl implements UserService {
	private String name;

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void save() {
		// TODO Auto-generated method stub
		System.out.println("方法已经被执行..." + name);
	}

}

传统方法实现

public void demo1() {
		UserServiceImpl userService = new UserServiceImpl();
		// 这里不能再面向接口编程了,因为 userservice里面没有setname这个方法
		userService.setName("李东");
		userService.save();
	}

使用DI
更改配置文件,在配置文件中添加属性

 <bean id="UserService" class="com.spring.demo1.UserServiceImpl">
    	<property name="name" value="李东"></property>
    </bean>

到这里就结束了,不需要更改测试类里面的源代码了,因为name的值直接通过配置文件注入进去了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值