五分钟学会Spring的IOC与DI

前言:如果要快速理解仅需看贴上去的两个代码示例别的不用看,如果要继续扩充知识看下知识扩充。每个扩充都有源码!每个扩充都有源码!!每个扩充都有源码!!!
#spring的IOC
##IOC简单讲解
 Ioc—Inversion of Control,即“控制反转”。通常程序员创建一个对象需要自己手动去new一个,既控制正转。现在交给spring的ioc容器去管理,让他帮你去new,既控制反转。
##IOC快速入门案例
###实体类

package com.test;
public class HelloWorld {
	public void hello(){
		System.out.println("hello world");
	}
}

###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"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	
	<bean id="helloWorld" class="com.test.HelloWorld"></bean>
</beans>

###测试类

package com.test;

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

public class HelloWorldTest {
	@Test
	public void testHelloWorld(){
		//启动spring容器
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		//根据id把spring容器中的bean提取出来了
		HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
		helloWorld.hello();
	}
}

###运行结果
这里写图片描述
###例子简介
从例子中可以感受到,我们不需要自己去new一个HelloWorld对象,而是通过ClassPathXmlApplicationContext这个对象从spring容器中获取HelloWorld对象,这就是IOC的控制反转。
###IOC知识扩充
####IOC创建对象的方式
(1)默认构造函数创建,既上面那个例子
(2)实例工厂方法
(3)静态工厂方法
####IOC创建对象的时间
(1)默认启动spring容器的时候创建
(2)当设置lazy-init="true"的时候,调用的时候创建
####IOC创建对象的范围
(1)默认状态下为单例,既创建对象这个类的属性是全局的
(2)设置scope="prototype"的时候,是多例的,而且 无论lazy-init是值,都是在获取bean的时候才创建对象
####IOC创建对象时的初始化与销毁方法
(1)初始化方法init-method,加载spring容器的时候调用初始化方法,进行初始化。
(2)销毁方法destroy-method,spring容器关闭的时候进行调用销毁方法,进行销毁。
####对象的别名alias
(1)通过使用alias="xxx"可将一个bean起多个别名
#spring的DI
##DI简单讲解
DI—Dependency Injection,即“依赖注入”。依赖:应用程序依赖spring的IOC容器,注入:IOC容器注入某对象赋值。简单的可以理解为,给类的属性赋值。有了spring的IOC容器,我们不用自己在程序中手动去赋值,可以交给spring的IOC容器去赋值,这样我们无须知道怎么赋值,赋的什么值,可以将注意力集中在业务逻辑中。
##DI快速入门案例
###实体类

package com.test;
public class Person {
	private Long pid;
	private String name;
   /*get set省略*/
}

###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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
   <bean id="person" class="com.test.Person">
   		<property name="pid" value="1"></property>
   		<property name="name" value="狗蛋"></property>
   </bean>
</beans>

###测试类

package com.test;

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

public class DTXMLTest {
	@Test
	public void testDI_XML_Setter(){
		ApplicationContext context = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		
		Person person = (Person)context.getBean("person");
		System.out.println(person.getName());
		System.out.println(person.getPid());
	}
}

###运行结果
这里写图片描述
###例子简介
从例子中可以看出,我们在应用程序中并没有对属性赋值,直接就能得到类的值。应为spring容器在加载的时候已经对类的属性进行了赋值,类的属性可以是类,可以是集合,数组等。这就是依赖注入,也就是给属性赋值。
###DI知识扩充
####依赖注入的方式
(1)通过set方法注入,既上面的小例子。
(2)通过构造器注入。
(3)父类与子类之间的赋值。
#进一步补充(可忽略)
##spring的IOC与DI注解形式
(1)di的注解形式。
(2)IOC与DI的注解形式。
(1)(2)的例子可能让您对annotation-config 与
component-scan区别产生疑问,如有疑问参考博客:https://blog.csdn.net/jingyangV587/article/details/80384819
(3)IOC与DI简单的mvc(加深理解)。

项目源码:https://gitee.com/jingyang3877/all-examples/blob/master/jingyang3877-spring-test-master.zip
参考博客:https://blog.csdn.net/qq_22654611/article/details/52606960/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值