学习一下SpringBoot 之依赖注入
附上一篇很好的关于依赖注入的博客:http://blog.csdn.net/lisongjia123/article/details/52134396
依赖注入就是Spring IoC容器创建bean(实例),不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。在理解依赖注入之前,看如下这个问题在各种社会形态里如何解决:
一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)。
(1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序里的调用者自己创建被调用者。
(2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。对应Java程序 的简单工厂的设计模式。
(3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子就自然出现在他面前。对应Spring的依赖注入。
(1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序里的调用者自己创建被调用者。
(2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。对应Java程序 的简单工厂的设计模式。
(3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子就自然出现在他面前。对应Spring的依赖注入。
也就说我们传统创建对象是 Person = new Person() ,关键字new创建bean现在我们创建bean通过依赖注入的方式
一、创建一个maven工程
二、 在pom.xml添加Spring的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.youhu</groupId>
<artifactId>spring4_di</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
然后就看到idea自动导入了spring需要的包
三、 建四个class(代码如下)
DiConfig.java
package com.youhu.spring4_di.di;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @Description: TODO
* @Author:You.Hu
* @Create:2017-03-11 16:51
*/
@Configuration
@ComponentScan("com.youhu.spring4_di.di")
public class DiConfig {
}
FunctionService.java
package com.youhu.spring4_di.di;
import org.springframework.stereotype.Service;
/**
* @Description: diservice
* @Author:You.Hu
* @Create:2017-03-11 16:46
*/
@Service
public class DiService {
public String diFunctin(){
return "this di service!";
}
}
UseDiService.java
package com.youhu.spring4_di.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description: UseDiService
* @Author:You.Hu
* @Create:2017-03-11 16:48
*/
@Service
public class UseDiService {
@Autowired
private DiService diService;
public String useDiFunction(){
return diService.diFunctin();
}
}
Main.java
package com.youhu.spring4_di.di;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @Description: main
* @Author:You.Hu
* @Create:2017-03-11 16:52
*/
public class Main {
public static void main (String [] args){
//1.获取context上下文(作为Spring容器)
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);
//2.创建实例(注意并不是通过new的方式)
UseDiService useDiService= context.getBean(UseDiService.class);
System.out.println(useDiService.useDiFunction());
context.close();
}
}
注解介绍:
@Service当前类是一个由Spring管理的一个bean (在业务逻辑service层使用)
@Autowired 是把DiService的实体注入到UseDiService中
@Configuration 当前类是一个配置类
@ComponentScan 自动扫描com.youhu.spring4_di.di下所有使用@service、@Repository、@Controller的类注册为bean(实例)
使用AnnotationConfigApplicationContext来作为Spring容器 然后获得UseDiService的bean(实例)
五、运行结果
我们通过依赖注入的方式实现调用!简单实用
附上源码地址
点击打开链接
一起学习SpringBoot