依赖注入

依赖注入   Inversion of Control-IOC(控制翻转)和依赖注入(dependency injection-DI)在Sping环境下是等同的概念,控制翻转是通过依赖注入实现的。所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。   依赖注入的主要目的是为了解耦,体现了一种"组合"的理念。如果你希望你的类   具备某项功能的时候,是继承自已个具有此功能的父类好呢?还是组合另外一个   具有这个功能的类好呢?答案是不言而喻的,继承一个父类,子类将与父类耦合,组合另外一个类则使耦合度大大降低。   Spring IoC 容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中,Spring提供使用xml、注解、Java配置、groovy配置实现Bean的创建和注入。    无论是xml配置、注解配置还是java配置,都被称为配置元数据,所谓元数据即描述数据的数据,元数据本身不具备任何可执行的能力,只能通过外面代码来对这些元数据行解析后进行一些有意义操作。Spring容器解析这些配置元数据进行Bean初始化、配置和管理依赖。    声明Bean的注解:    @Component 组件,没有明确的角色。    @Service 在业务逻辑层(service层)使用。    @Repository 在数据访问层(dao层)使用。    @Controller 在展现层(MVC->Spring MVC)使用。    @Component、@Service、@Repository和@Controller是等效的,可根据需要选用。    注入Bean的注解,一般情况下通用。    @Autowired: Spring提供的注解    @Resource:JSR-250提供的注解    @Inject:JSR-330提供的注解    @Autowired、@Resource、@Inject可注解在set方法上或者属性上,习惯注解在属性上,优点是代码更少、层次更清晰。

    编写功能类的Bean    @Service    public class FunctionService {        public String sayHello(String word){            return "Hello " + word +"!";        }    }    使用@Service注解声明当前FunctionService类是Spring管理的一个Bean 其中,    使用@Component、@Service、@Repository和@Controller是等效的,可根据需要选用。    使用功能类的Bean    @Service    public class UseFunctionService {        @Autowired        FunctionService functionService ;

        public String  SayHello(String word) {            return functionService.sayHello(word);        }    }    使用@Service注解声明当前UseFunctionService类是Spring管理的一个Bean    使用@Autowired将FunctionService的实体Bean注入到UseFunctionService中,让UseFunctionService    具备FunctionService的功能,此处使用JSP-330的@Inject注解或者JSR-250的@Resource注解是等效的。

    配置类

    @Configuration    @ComponentScan("com.faunjoe_spring.ch1.di")    public class DiConfig {

    }

    @Configuration声明当前类是一个配置类。    使用@ComponentScan,自动扫描包名下所有使用@Component、@Service、@Repository和@Controller的类,并注册为Bean

    public class Main {        public static void main(String[] args) {            AnnotationConfigApplicationContext context = new                AnnotationConfigApplicationContext(DiConfig.class);

            UseFunctionService  useFunctionService =                context.getBean(UseFunctionService.class);

            System.out.printIn(useFunctionService.SayHello("di"));

            context.close();        }    }

    使用AnnotationConfigApplicationContext作为Spring容器,接受输入一个配置类作为参数:    获得声明配置的UseFunctionService的Bean。
时间: 2024-11-10 08:15:32

依赖注入的相关文章

<<ABP框架>> 依赖注入

文档目录 本节内容: 什么时依赖注入 传统方式的问题 解决方案 构造器注入模式 属性注入模式 依赖注入框架 ABP 依赖注入基础 注册依赖 约定注入 辅助接口 自定义/直接 注册 使用IocManager 使用Castle Windsor API 解析 构造器和属性注入 IIocResolver 和 IIocManager 另外 IShouldInitialize 接口 Asp.net Mvc 和 Asp.net Web Api 集成 Asp.net Core 集成 最后提醒 什么是依赖注入 如

ABP之依赖注入

写在开头 ABP开源项目最近有点小火,还开展了线下活动.本着学习DDD的心态与学习开源代码的的好奇,我也看了一遍ABP源码,在此将自己学习ABP的一些心得记录下来. 作为核心的IoC 作为一种解耦的方式,一些IoC框架就成了项目了核心.比如蒋金楠的VideoMall与陈青阳的Byteart Retail项目都是使用Unity.而ABP则是使用Castle. Register与Resolve Register与Reslove是IoC基本功能,向容器中注类型对应关系再向容器按注入规则索取对象实体.A

Asp.Net Core 3.1 Api 集成Abp项目依赖注入

Abp 框架 地址https://aspnetboilerplate.com/ 我们下面来看如何在自己的项目中集成abp的功能 我们新建core 3.1 API项目和一个core类库 然后 两个项目都要安装Abp Nuget Package 版本为5.1.0 如上图,在Application项目新建项目模块类,Initialize方法中,会在启动时扫描dll中需要依赖注入的类和接口 如上图,在ApiHost项目新建项目模块类,该项目依赖Application项目 在Application 建立Q

04 Spring框架 依赖注入(一)

上一节我们讲了几个bean的一些属性,用来限制我们实例创建过后的状态. 但是细心的我们会发现其实上面demo创建的实例并不完整,对象创建出来过后只有一个方法,而没有包含其他信息(如属性). 之前我们说了Spring的核心是IOC,这是使用Spring其他组件的前提条件.这里我们做一下补充:Spring依赖IOC,而IOC依赖注入. 什么是注入? 注入就是在Spring主配置文件bean中添加一些信息使得新创建的实体类能够带有属性值(这里的属性值可以是其他实例的对象). 接下来就该看看注入有哪些方

spring框架——依赖注入

依赖注入:DI 又称控制反转:IoC 项目名字spring_DI 一.implement包中定义了两个接口Food和Person 1.接口Food package org.interfaces; public interface Food { public String eat(); //food接口有被吃的方法待实现} 2.接口Person package org.interfaces; public interface Person { public void eatFood(); //人接

ABP源码分析六:依赖注入的实现

ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架.2.一种实现途径是通过实现IConventionalDependencyRegistrar的类定义Register 规则,然后通过IocManager来读取这个规则完成依赖注入.3另一种实现途径是直接IocManager的Register方法完成注入. 第一种途径: 下面具体分析:代码在Abp项目文件的Dependency文件夹下. 先出一张相关接口和类的关系图,然后逐个解释. IDictionary

[Architect] ABP(现代ASP.NET样板开发框架)(7) 依赖注入

本节目录: 什么是依赖 传统方式的问题 解决方案 构造函数注入 属性注入 注入框架 Abp依赖注入框架 注册 通常注册 帮助接口 自定义注册 解析 构造函数 & 属性注入 IIocResolver & IIocManager 扩展 IShouldInitialize ASP.NET MVC & ASP.NET Web API注入 什么是依赖 如果你已经知道依赖注入思想,构造函数和属性注入模式,你可以跳到下节. 维基:"依赖注入是1种软件设计模式,在这种模式下,1个或多个依

ABP依赖注入

ABP依赖注入 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之6.ABP依赖注入 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由 上海-半冷 提供翻译 什么是依赖注入 如果你已经知道依赖注入的概念,构造函

基于DDD的现代ASP.NET开发框架--ABP系列之6、ABP依赖注入

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之6.ABP依赖注入 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由 上海-半冷 提供翻译 什么是依赖注入 如果你已经知道依赖注入的概念,构造函数和属性注入模式

ABP理论学习之依赖注入

ABP理论学习之依赖注入 原文  http://www.cnblogs.com/farb/p/ABPDependencyInjection.html 注: 加上自己的理解 返回总目录 本篇目录 什么是依赖注入 传统方式产生的问题 解决办法 依赖注入框架 ABP中的依赖注入基础设施 注册 解析 其他 ASP.NET MVC和ASP.NET Web API集成 最后提示 什么是依赖注入 维基百科说:"依赖注入是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个