关于Spring_01

1.Spring有什么作用?

      Spring就是用来封装对象的。

2.原理是什么?

      Spring自己写了一个工厂类,用来读取核心配置文件,通过id或者是name属性,反射出配置文件中的各种已经被用户配置好的对象。

3.核心功能是什么?

        反转控制(inverse of control)、面向切面编程(aspect oriented programming)。

(1)反转控制是什么意思?

        指的是将原来程序中用户自己创建对象翻转到了IOC容器中。说白了也就是原来用户在写代码创建对象的时候需要自己来new,现在呢,Spring自己有一个容器叫IOC,它就是用来创建对象的,可以对bean进行实例化,使用对象的时候就从IOC里面取。IOC反转控制,也就是说,将对象的创建权反转到了Spring容器里面。

(2)DI(依赖注入)是什么意思?

      Spring在创建一个类的实例时,如果这个类的里面依赖其他类型的引用,那么会自动将其引用的类型的类先实例化再注入到该实例里面。

举个例子:

<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
	<bean id="userService" class="service.impl.UserServiceImpl">
	    <property name="userDao" ref="userdao"></property>
	</bean>

name=“userDao”指的是在id=“userDao”的这个对象里有一个叫userDao 的属性,并且还有set方法。

ref=“userdao”指的是在Spring容器中,有一个id或者name叫userdao的bean。

4.一个关于IOC和DI的小demo

(1)建立项目,然后导包。

使用Spring框架最起码需要6个包,有4个基本包(core、experssion、bean、context)和2个日志包。


(2)建立Spring核心配置文件applicationContext.xml。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
</beans>

记得把约束加上。

(3)建立dao接口和dao实现类:

package dao.impl;

import dao.UserDao;

public class UserDaoImpl implements UserDao{


	@Override
	public void sayHello() {
		// TODO Auto-generated method stub
		System.out.println("DI,依赖注入");
	}

}

(4)建立service接口和servive实现类

package service.impl;

import dao.UserDao;
import service.UserService;

public class UserServiceImpl implements UserService {
	
	private UserDao userDao;

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	public void sayHello() {
		userDao.sayHello();
	}

}

(5)配置applicationContext.xml

<!--IOC容器和DI注入   无参构造-->
	<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
	<bean id="userService" class="service.impl.UserServiceImpl">
	    <property name="userDao" ref="userDao"></property>
	</bean>

这样项目就完成了,我们来测试一下

(6)Testdemo类

package demo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import service.UserService;

public class DemoIOC {
	@Test
	public void sayHello(){
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService bean = (UserService)context.getBean("userService");
		bean.sayHello();
	}

}

(7)运行结果


5.总结:DI和IOC区别:

ioc:控制反转,将对象的创建权反转到ioc容器。

DI:依赖注入,将对象所依赖的对象注入到对象的属性中。 就是IOC的具体实现方法。

1IOC是一个容器。

2IOC容器中包括spring管理的所有bean

3IOC容器负责对bean进行实例化。

4IOC容器对bean进行实例化时候,检查有哪些依赖的属性,将依赖的属性注入到实例化的bean的属性中。

要实现依赖注入,需要spring管理依赖方和被依赖方(spring要对依赖方和被依赖方实例化)。





猜你喜欢

转载自blog.csdn.net/cherish_lucky/article/details/80288895