SpringBoot学习 (二)— 依赖注入

来源:互联网 发布:连接香港网络 编辑:程序博客网 时间:2024/06/05 23:08

学习一下SpringBoot 之依赖注入

附上一篇很好的关于依赖注入的博客:http://blog.csdn.net/lisongjia123/article/details/52134396

依赖注入就是Spring IoC容器创建bean(实例),不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。在理解依赖注入之前,看如下这个问题在各种社会形态里如何解决:

一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)。


(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 */@Servicepublic 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 */@Servicepublic 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


0 0