01-SpringBoot——Spring基础-依赖注入


【博文目录>>>】


【项目源码>>>】


【依赖注入】

控制翻转(Inversion of Control-IOC)和依赖注入(dependency injection-DI)在Spring环境下是同等的概念,控制翻转是通过依赖注入实现的。所谓依赖注入是指容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身去创建和解决自自己的依赖。依赖的主要目的是为了解耦,体现一种“组合”的理念。

无论是xml 自己置、注解配置,还是Java 配置,都被称为配置元数据,元数据是描述数据的数据。元数据本身不具备任何可执行的能力,只能通过外界代码来对这些元数据行解析后进行一些有意义操作。Spring 容器解析这些配置元数据进行Bean 初始化、配置和管理依赖。

声明Bean 的注解:

• @Component 组件,没有明确的角色。
• @Service 在业务逻辑层( service 层)使用。
• @Repository 在数据访问层( dao 层)使用。
• @Controller 在展现层( MVC→Spring MVC )使用。

注入Bean 的注解,一般情况下通用。

• @Autowired: Spring 提供的注解。
• @Inject: JSR“330 提供的注解。
• @Resource: JSR”250 提供的注解。

@Auto wired 、@Inject、@Resource 可注解在set 方法上或者属性上,如果注解在属性上,代码更少、层次更清晰。


【样例实现】

/**
 * 使用@Service 注解声明当前FunctionService 类是Spring 管理的一个Beano 其中,使
 * 用@Component 、@Service 、@Repository 和@Controller 是等效的,可根据需要选用。
 *
 * Author: 王俊超
 * Date: 2017-07-10 08:01
 * All Rights Reserved !!!
 */
@Service
public class FunctionService {
    public String sayHello(String word) {
        return "Hello " + word + " !";
    }

}
package com.example.spring.framework.di;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 使用@Service注解声明当前UseFunctionService 类是Spring 管理的一个Bean
 * <p>
 * Author: 王俊超
 * Date: 2017-07-10 08:03
 * All Rights Reserved !!!
 */
@Service
public class UseFunctionService {

    /**
     * 使用@Autowired 将FunctionService 的实体Bean 注入到UseFunctionService 中,
     * 让UseFunctionService 具备FunctionService 的功能,此处使用JSR嗣330的@Inject
     * 注解或者JSR-250的@Resource 注解是等效的。
     */
    @Autowired
    FunctionService functionService;

    public String SayHello(String word) {
        return functionService.sayHello(word);
    }

}
package com.example.spring.framework.di;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * 使用@Configuration声明当前类是一个配置类
 * 使用@ComponentScan,自动扫描包名下所有使用@Service 、@Component 、@Repository
 * 和@Controller 的类,并注册为Bean
 *
 * Author: 王俊超
 * Date: 2017-07-10 08:01
 * All Rights Reserved !!!
 */
@Configuration
@ComponentScan("com.example.spring.framework.di")
public class DiConfig {

}
package com.example.spring.framework.di;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Author: 王俊超
 * Date: 2017-07-10 08:08
 * All Rights Reserved !!!
 */
public class Main {
    public static void main(String[] args) {
        // 1、使用AnnotationConfigApplicationContext 作为Spring 容器,接受输入一个配置类作为参数
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(DiConfig.class);

        // 2、获得声明自己置的UseFunctionService 的Bean
        UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);

        System.out.println(useFunctionService.SayHello("world"));

        context.close();
    }
}

【运行结果】

springboot引入mariadb依赖 springboot依赖不能导入_java