以例子的形式讲解Spring的IOC(控制反转)与DI(依赖注入)

1、什么是控制反转?

简而言之,就是把对象的创建权由我们之前的手动创建现在由Spring容器来处理,对象创建的控制权发生了反转,故而得名控制反转,Inversion Of Control(IOC);

2、什么叫依赖注入?

Dependency Injection是控制反转的核心,就是把我们对象之间的依赖关系交由我们Spring容器来进行管理,也就是说动态的向某个对象提供他需要的其他对象;

3、在我们实际程序中哪里使用到了我们的控制反转与依赖注入?

在以下例子中,我们创建了userDao、userService接口以及其实现类,我们都知道dao用来处理持久层,也就是操作数据库,而业务层service用来操作Dao层,所以我们写了几个方法来模拟这个过程;

public interface IuserDao {
	public void findByUsernameAndPassowrd();
}
public class IuserDaoImpl implements IuserDao{

	public void findByUsernameAndPassowrd() {
		// TODO Auto-generated method stub
		System.out.println("这里是dao层的方法");
	}
	

}
public interface IuserService {
	//因为在业务层的话一般是可以处理登录请求的,故写一个登录的方法
	public void login();
}
public class UserServiceImpl implements IuserService{
	//在这里我们定义一个成员变量,变量名应该对xml文件中的name相对应;
	private IuserDao userDao;
	//这里给他添加一个set方法
	public void setUserDao(IuserDao userDao) {
		this.userDao = userDao;
	}

	public void login() {
		// TODO Auto-generated method stub
		System.out.println("这里业务层service的 方法");
		System.out.println("这里是通过依赖注入打印出来的方法");
	//使用Spring配置方式new一个对象,IOC控制反转
		//读取Applicationcontext.xml文件,获取Bean节点
//		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//		//根据ID来获取Bean,并且对其进行强转
//		IuserDao userDao=(IuserDao)ac.getBean("userDao");
		//然后使用这个userDao对象来调用里面的那个方法
		userDao.findByUsernameAndPassowrd();
		
	}

}

关于Service层调用Dao层对象(控制反转)

在以上代码中我们可以看到我们在业务层中调用了数据层Dao里面的方法,而我们这里没有选择直接在Service层创建对象,而是把对象的创建过程交给了我们的spring容器,也就是在我们的applicationContext.xml进行配置,在里面通过bean进行创建对象,并且这个创建对象的过程使用到了我们的java反射机制,只要提供dao接口的实现类全路径,就能创建出其dao对象,然后我们在service层使用Appplication对其进行获取,从而可使用该对象对其进行调用dao层里面的方法;

关于我们在test类中访问service对象(依赖注入)

因为我们在test方法里面需要访问service对象,故我们在applicationContext.xml中对对象进行注入;

<!-- 这里的话直接把上面那个对象进行依赖注入,也就是相当于用了set/get方法 -->
<bean id="userService" class="com.runxun.UserServiceImpl">
	<property name="userDao" ref="userDao"></property>
</bean>

注意:我们这里需要使用property对userDao进行注入,这个name必须是我们在seivice层实现类中的创建的dao层对象名,并且给其添加一个set方法,通过该方法进行依赖注入之后在service实现类中我们就可以直接使用该dao对象来调用Dao层里面的方法而无须像之前一样使用applicationContext进行对象获取;
在这里插入图片描述

1、安装maven 2、eclipse安装m2eclipse插件 打开Eclipse菜单栏Help->Eclipse Marketplace 输入“Maven”搜索到插件Maven Integration for Eclipse 并点击insall安装 3、安装成成之后我们在Eclipse菜单栏中点击File->New->Other 在弹出的对话框中点击Maven文件夹 点击Maven Project,并点击Next,到下一个对话框是默认设置,继续点击Next到下面这一步 选择maven-archetype-quickstart,点击Next 4、配置pom.xml , 加上以下依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> propertities标签里面加上version信息: <springframework.version>3.2.0.RELEASE</springframework.version> 保存pom.xml后等待下载组件。 5、写代码 如果发现出现applicationContext could not resolve to a type, 可能是依赖没下载完或者下载失败,或者jar包出现问题,解决方法删除这个jar包,然后重新下载。在Eclipse中选中项目右键展开run as,然后选中maven install,重新下载jar包。 https://blog.csdn.net/linxc008/article/details/81054526 applicationContext.xml要加在src/java/resources下 6.bulid project 右击项目,点击Run as, 选择Maven build... , 在弹出的窗口中的Goals栏填上Maven命令:clean package,然后点击Run.然后在有main函数的java文件上右键点击Run As Java Application 注: applicationContext.xml 配置bean信息所依赖的class路径要一致且大小写敏感,否则运行时会出现java.lang.NoClassDefFoundError (wrong name)。 https://blog.csdn.net/my_bkn/article/details/6875481
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值