javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

java-Spring Autowiring类与接口?

我有这个春天的配置:

<bean id="boo" class="com.x.TheClass"/>

TheClass实现了TheInterface。然后,我得到了这个(假设的)Java代码:

@Autowired
TheInterface x;

@Autowired
TheClass y;

TheInterface的自动接线有效,但TheClass的自动接线失败。 春天给我上了NoSuchBeanDefinitionException这堂课。

为什么可以连接接口而不是类?

trans by 2020-08-11T21:16:32Z

oop-如何在松耦合应用程序中了解全局?

我们一直在使用松散耦合和依赖注入来开发代码。

许多“服务”样式类都有一个构造函数和一个实现接口的方法。 每个单独的类很容易被孤立地理解。

但是,由于耦合的松散性,查看类不会告诉您有关其周围的类或它在较大图中适合的位置的信息。

使用Eclipse跳到协作者并不容易,因为您必须通过接口。 如果接口是Runnable,那么对于实际插入哪个类没有帮助。确实有必要返回DI容器定义并尝试从中确定内容。

这是依赖项注入服务类中的一行代码:-

  // myExpiryCutoffDateService was injected, 
  Date cutoff = myExpiryCutoffDateService.get();

这里的耦合尽可能松散。 到期日期可以按照任何方式按字面实现。

这是在更耦合的应用程序中可能看起来的样子。

  ExpiryDateService = new ExpiryDateService();
  Date cutoff = getCutoffDate( databaseConnection, paymentInstrument );

从紧密耦合的版本中,我可以推断出截止日期是通过某种方式使用数据库连接从付款方式中确定的。

我发现第一种样式的代码比第二种样式的代码更难理解。

您可能会争辩说,在阅读本课时,我不需要知道如何确定截止日期。 的确如此,但是如果我只是在寻找一个错误或者在某个地方找出需要增强的地方,那是有用的信息。

还有其他人遇到这个问题吗? 您有什么解决方案? 这只是要调整的东西吗? 是否有工具可以可视化将类连接在一起的方式? 我应该增加班级还是增加班级?

(由于我对任何答案都感兴趣,因此故意将这个问题与容器无关)。

trans by 2020-08-10T14:59:09Z

php-在laravel外观上使用依赖项注入

我已经阅读了许多资料,这些资料暗示为方便起见,laravel Facade最终存在了,应该注入这些类以允许松散耦合。 甚至Taylor Otwell都有帖子解释如何执行此操作。 看来我并不是唯一一个对此感到奇怪的人。

use Redirect;

class Example class
{
    public function example()
    {
         return Redirect::route("route.name");
    }
}

会成为

use Illuminate\Routing\Redirector as Redirect;

class Example class
{
    protected $redirect;

    public function __constructor(Redirect $redirect)
    {
        $this->redirect = $redirect
    }

    public function example()
    {
         return $this->redirect->route("route.name");
    }
}

很好,除了我开始发现某些构造函数和方法开始使用四个以上的参数。

由于Laravel IoC似乎仅注入到类构造函数和某些方法(控制器)中,即使我具有相当精简的函数和类,我也发现这些类的构造函数已被所需的类打包,然后注入到 所需的方法。

现在,我发现如果继续采用这种方法,我将需要自己的IoC容器,如果我使用的是laravel之类的框架,那感觉就像是在重新发明轮子吗?

例如,我使用服务来控制业务/视图逻辑,而不是使用处理它们的控制器-它们只是路由视图。 因此,控制器将首先获取其对应的service,然后再获取其URL中的parameter。 一个服务功能还需要检查表单中的值,因此我需要RequestValidator。那样,我有四个参数。

// MyServiceInterface is binded using the laravel container
use Interfaces\MyServiceInterface;
use Illuminate\Http\Request;
use Illuminate\Validation\Factory as Validator;

...

public function exampleController(MyServiceInterface $my_service, Request $request, Validator $validator, $user_id) 
{ 
    // Call some method in the service to do complex validation
    $validation = $my_service->doValidation($request, $validator);

    // Also return the view information
    $viewinfo = $my_service->getViewInfo($user_id);

    if ($validation === 'ok') {
        return view("some_view", ['view_info'=>$viewinfo]);
    } else {
        return view("another_view", ['view_info'=>$viewinfo]);
    }
}

这是一个例子。 实际上,我的许多构造函数已经注入了多个类(模型,服务,参数,外观)。 我已经开始将“构造函数注入”(如果适用)“卸载”到方法注入,并且让调用这些方法的类使用其构造函数来注入依赖项。

有人告诉我,根据经验,方法或类构造函数的四个以上参数是不好的做法/代码异味。 但是,如果您选择注入laravel外墙的路径,我看不出如何真正避免这种情况。

我把这个主意弄错了吗? 我的类/函数不够精简吗? 我是否错过了laravels容器的要点,还是真的需要考虑创建自己的IoC容器? 其他一些答案似乎暗示laravel容器能够消除我的问题?

就是说,在这个问题上似乎还没有达成共识。

trans by 2020-08-09T11:56:55Z

使用唯一的bean进行spring自动装配:spring需要单个匹配bean,但是发现2

我正在尝试使用Spring为webapp自动装配一些bean(用于依赖注入)。 一个控制器bean包含另一个bean,后者又保存另一组bean的哈希图。 目前,该地图只有一个条目。 当我在tomcat中运行并调用服务时,我收到一条错误消息,说第二个bean(保存在控制器中)不是唯一的

No unique bean of type [com.hp.it.km.search.web.suggestion.SuggestionService] is defined: expected single matching bean but found 2: [suggestionService, SuggestionService]

我看不到我在两次定义bean的地方,但是对于Spring和自动装配来说是新的,所以我可能缺少一些基本知识。 xml和以下2类的源代码...

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"     xmlns:context="http://www.springframework.org/schema/context"     xmlns:mvc="http://www.springframework.org/schema/mvc"
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-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="com.hp.it.km.search.web.suggestion" />
<mvc:annotation-driven />
<context:annotation-config />

<bean id="SuggestionController" class="com.hp.it.km.search.web.suggestion.SuggestionController">
    <property name="service">
        <ref bean="SuggestionService" />
    </property>
</bean>

<bean id="SuggestionService" class="com.hp.it.km.search.web.suggestion.SuggestionService">
    <property name="indexSearchers"> 
         <map>
            <entry key="KMSearcher"> <ref bean="KMSearcherBean"></ref></entry>
        </map>
    </property>
</bean>

<bean id="KMSearcherBean" class="com.hp.it.km.search.web.suggestion.SuggestionIndexSearcher">
      <constructor-arg index="0" value="KMSearcher" />
      <constructor-arg index="1" value="C://dev//workspace//search-restful-webapp//src//main//resources//indexes//keyword" />
</bean>

与自动接线的控制器和服务Bean相关的类在这里...

@Controller
public class SuggestionController {
private SuggestionService service;

@Autowired
public void setService(SuggestionService service) {
    this.service = service;
}

public SuggestionService getService() {
    return service;
}

和...

@Component
public class SuggestionService {

private Map<String, IndexSearcher> indexSearchers = new HashMap<String,      IndexSearcher>();

@Autowired
public void setIndexSearchers(Map<String, IndexSearcher> indexSearchers) {
    this.indexSearchers = indexSearchers;
}

    public SuggestionService() {
    super(); }

请帮忙!

trans by 2020-08-03T02:19:07Z

java-Guice和属性文件

有没有人举过一个例子,说明如何使用Google Guice从.properties文件中注入属性。 有人告诉我Guice在注射器启动时能够验证所有必需的属性是否存在。

目前,我在guice Wiki上找不到任何有关此的内容。

trans by 2020-08-02T06:31:19Z

将Spring依赖项注入JPA EntityListen

我正在尝试将Spring依赖项注入JPA EntityListener。 这是我的侦听器类:

@Configurable(autowire = Autowire.BY_TYPE, dependencyCheck = true)
public class PliListener {

    @Autowired
    private EvenementPliRepository evenementPliRepository;

    @PostPersist
    void onPostPersist(Pli pli) {
        EvenementPli ev = new EvenementPli();
        ev.setPli(pli);
        ev.setDateCreation(new Date());
        ev.setType(TypeEvenement.creation);
        ev.setMessage("Création d'un pli");
        System.out.println("evenementPliRepository: " + evenementPliRepository);
        evenementPliRepository.save(ev);
    }


}

这是我的Entity类:

@RooJavaBean
@RooToString
@RooJpaActiveRecord
@EntityListeners(PliListener.class)
public class Pli implements Serializable{
...

但是,我的依存关系(即evenementPliRepository)始终为空。

谁能帮忙吗?

trans by 2020-07-30T18:18:50Z

设计模式-无法结合Factory / DI

假设我有一些Foo类,它具有两个依赖项:ISerializer<T>IFileAccessHandler

现在,此类还具有其他依赖关系,即功能依赖关系。 我不希望任何人在无效状态下实例化此类,因此我还需要在构造函数中传递一个域对象。

但是,当我实际上在创建类Foo的那一刻也知道要传递哪个域对象时,如何由IoC处理呢?

我将域对象设置为工厂设置的属性。 因此,Factory进行Service Locator调用,以获取具有其依赖关系的正确实例化的“ Foo”类,并进一步使用正确的域对象填充它并返回它。

但这是最好的方式吗? 我希望将域对象作为构造函数的一部分,以使其看起来像实际需要使用“ Foo”一样。

有任何想法吗?我在这里想念什么吗?

trans by 2020-07-26T13:52:33Z

.net-Simple Injector vs广iro vs Au

我是DI和IoC的新手,我正在尝试决定要学习哪个IoC容器。 我已经看到了几次性能比较,其中所引用的三个容器似乎表现很好。 但是,我发现没有包含Hiro或Simple Injector的功能比较。 Autofac的社区似乎是最大的社区,但是Hiro和Simple Injector的基准测试非常快,特别是Simple Injector声称非常易于学习。 就是说,由于功能集有限,我不想学习一个而必须切换到另一个。 因此,我倾向于Autofac,因为它相当成熟并且功能齐全(在这里和这里都是不错的文章),并且是最快的IoC容器之一。 有没有人曾经使用过这三个容器中的至少两个? 您可以提供任何功能比较吗?

trans by 2020-07-23T02:06:56Z

java-使用dagger2进行依赖项注入时是否可以注入超类?

我在Android应用程序中将Dagger2用于DI。 我发现我必须为使用@Inject字段的每个类编写注入方法。 有没有一种方法可以只注入父类,而不必在每个子类上调用inject?以活动为例。 我有一个BaseActivity,每个Activity都从此扩展。 有没有一种方法可以在BaseActivity的组件中创建一个注入方法,并在BaseActivity的onCreate中调用inject,并且子活动中的@inject字段会自动注入?

trans by 2020-07-22T08:52:42Z

依赖注入-Dagger 2-@Singleton注释类的目的是什么

从匕首2文档中,我注意到您可以使用@Singleton注释的类。 我试图在代码中将类标记为@Singleton的目的是什么,但不会生成单例对象。 我不清楚用此注释标记我的班级的用途。

从文档中,请重点关注以下声明:

可注射类上的@Singleton注释还可以用作 文档。 它提醒潜在的维护者,此类可能是 由多个线程共享。*

@Singleton
class CoffeeMaker {
  ...
}

更新:在查看froger_mcs答案后,我看到在Dagger 2中,您可以通过模块或构造函数注入来提供注入。 因此,可以插入以下类(尽管不在模块中):

@Singleton
public class MyClass {

    @Inject
    public MyClass() {

    }
}

在此版本中,为我们注入了构造函数,并且在Android活动中,您只需执行以下操作即可提供它:

@Inject
MyClass myClass;
//then in onCreate actually inject(this) from your graph of course.
trans by 2020-07-21T12:23:12Z

javascript-如何在con中动态注入依赖

我仍然是Angularjs的新手。我想在控制器中动态注入服务(我创建的)的依赖项。

但是,当我对具有依赖项的服务进行编码时,出现此错误:

错误:未知提供程序:$ windowProvider <-$ window <-base64

这是控制器的代码。

var base64 = angular.injector(['servicesModule']).get('base64');
console.log("base64", base64.encode("my text will be encoded"));

此代码有效:

var servicesModule = angular.module('servicesModule', []);
servicesModule.factory('base64', function() {
    return {

        name: 'base64',
        readonly: false,

        encode: function(input) {
            return window.btoa(input);
        },

        decode: function(input) {
            return window.atob(input);
        }

    };

});

此代码不起作用:

var extModule = angular.module('ext', []);
extModule.factory('base64', ['$window', function($window) {
    return {

        name: 'base64',
        readonly: false,

        encode: function(input) {
            return $window.btoa(input);
        },

        decode: function(input) {
            return $window.atob(input);
        }

    };

}]);

另一个问题是服务与控制器位于同一模块中。如果模块具有依赖关系,则无法正常工作(我的模块配置中具有$ routeProvider依赖关系):

错误:未知提供程序:mainModule中的$ routeProvider

var mainModule = angular.module('main', [],
    function($routeProvider, $locationProvider) {
        //Some routing code
    }
);

JS小提琴

具有依赖项的相同模块(控制器+服务):[http://jsfiddle.net/yrezgui/YedT2/]

具有依赖性的不同模块:[http://jsfiddle.net/yrezgui/YedT2/4/]

没有依赖性的不同模块:[http://jsfiddle.net/yrezgui/YedT2/5/]

trans by 2020-07-20T19:09:02Z

c#-如何使用构造函数依赖项注入对asp.net核心应用程序进行单元测试

我有一个使用应用程序的startup.cs类中定义的依赖项注入的asp.net核心应用程序:

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration["Data:FotballConnection:DefaultConnection"]));


        // Repositories
        services.AddScoped<IUserRepository, UserRepository>();
        services.AddScoped<IUserRoleRepository, UserRoleRepository>();
        services.AddScoped<IRoleRepository, RoleRepository>();
        services.AddScoped<ILoggingRepository, LoggingRepository>();

        // Services
        services.AddScoped<IMembershipService, MembershipService>();
        services.AddScoped<IEncryptionService, EncryptionService>();

        // new repos
        services.AddScoped<IMatchService, MatchService>();
        services.AddScoped<IMatchRepository, MatchRepository>();
        services.AddScoped<IMatchBetRepository, MatchBetRepository>();
        services.AddScoped<ITeamRepository, TeamRepository>();

        services.AddScoped<IFootballAPI, FootballAPIService>();

这允许这样的事情:

[Route("api/[controller]")]
public class MatchController : AuthorizedController
{
    private readonly IMatchService _matchService;
    private readonly IMatchRepository _matchRepository;
    private readonly IMatchBetRepository _matchBetRepository;
    private readonly IUserRepository _userRepository;
    private readonly ILoggingRepository _loggingRepository;

    public MatchController(IMatchService matchService, IMatchRepository matchRepository, IMatchBetRepository matchBetRepository, ILoggingRepository loggingRepository, IUserRepository userRepository)
    {
        _matchService = matchService;
        _matchRepository = matchRepository;
        _matchBetRepository = matchBetRepository;
        _userRepository = userRepository;
        _loggingRepository = loggingRepository;
    }

这很整洁。 但是当我要进行单元测试时成为一个问题。 因为我的测试库没有在其中设置依赖项注入的startup.cs。 因此,将这些接口作为参数的类将为null。

namespace TestLibrary
{
    public class FootballAPIService
    {
        private readonly IMatchRepository _matchRepository;
        private readonly ITeamRepository _teamRepository;

        public FootballAPIService(IMatchRepository matchRepository, ITeamRepository teamRepository)

        {
            _matchRepository = matchRepository;
            _teamRepository = teamRepository;

在上面的代码中,在测试库中,_matchRepository和_teamRepository将仅为null。 :(

我可以做类似ConfigureServices之类的事情,在我的测试库项目中定义依赖项注入吗?

trans by 2020-07-20T16:34:12Z

依赖注入-MEF和IoC容器之间的差异(例如Unity,Autofac,SMap,Ninject,Windsor.Spring.net等)

我一直在搜索有关依赖项注入的内容,并阅读了一些文章。但我仍然无法找出MEF与其他IoC之间的区别。所以,我的问题是:在哪种情况下,我更喜欢使用MEF或IoC容器?

为什么将MEF与PRISM一起用于(WPF和Silverlight)或桌面应用程序,为什么很好?

而在Web应用程序中,人们使用IoC容器。

那么,决定我应该使用哪种依赖技术的标准是什么?

我浏览过以下文章[http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx],但我无法确定任何内容。

trans by 2020-07-20T10:26:09Z

Python依赖注入框架

是否有与Python等效的Guice([http://code.google.com/p/google-guice)]框架?

trans by 2020-07-11T06:22:51Z

Spring在没有@Autowired批注的情况下在构造函数中注入依赖项

我正在尝试从此官方Spring教程中获取示例,并且对此代码有依赖性:
[HTTPS://GitHub.com/spring-guides/公司-A sync-method/tree/master/complete]

如果您查看AppRunner.java类上的代码,则会遇到2个问题:

1)当服务器启动时,如果我在此类的构造函数中放置一个断点,就像在构造函数中一样,Spring会使用配置的@Service bean提供GitHubLookupService。 但是,构造函数上没有@Autowired批注,那么在世界范围内如何以正确的依赖关系调用此构造函数? 应该是null

它是Spring Boot的自动假设吗?
Spring是否看到“私有字段+构造函数参数”,并且假定它应该寻找合适的bean?
是Spring Framework还是Spring Boot?
我想念什么吗?

2)我记得,必须为bean /服务等提供默认构造函数。此类(AppRunner)为何没有默认构造函数?Spring如何知道应该使用参数运行构造函数?是因为它是唯一的构造函数吗?

trans by 2020-07-06T13:17:49Z

C#-.NET Core DI,将参数传递给constru的方法

具有以下服务构造函数

public class Service : IService
{
     public Service(IOtherService service1, IAnotherOne service2, string arg)
     {

     }
}

使用.NET Core IOC机制传递参数的选择有哪些

_serviceCollection.AddSingleton<IOtherService , OtherService>();
_serviceCollection.AddSingleton<IAnotherOne , AnotherOne>();
_serviceCollection.AddSingleton<IService>(x=>new Service( _serviceCollection.BuildServiceProvider().GetService<IOtherService>(), _serviceCollection.BuildServiceProvider().GetService<IAnotherOne >(), "" ));

还有其他办法吗?

trans by 2020-07-05T21:19:12Z

依赖项注入-为什么MVC4使用服务定位器反模式?

在阅读了Mark Seemann的“ .NET中的依赖项注入”之后,我离开了服务定位器,它是一种反模式。

阅读有关MVC 4的发行说明后,我会看到:

通过DependencyResolver改进了控制反转(IoC):Web API 现在使用由MVC的依赖关系实现的服务定位器模式 解析器以获取许多不同设施的实例。

因此,我感到好奇和困惑,为什么微软会在2012年使用服务定位器。

trans by 2020-06-27T07:43:52Z

java-基于Spring批注的DI vs xml配置?

最近,在我们的团队中,我们开始讨论在代码中使用spring注释来定义spring依赖关系。 当前,我们正在使用context.xml定义我们的依赖项。 您会为我提供这两种方法的线索,以及哪种方法最好使用?

编辑:我知道这似乎是对更一般的问题的重复问题,但是我对注释与仅对依赖项注入的配置的影响感兴趣,我相信与一般问题相比,注释和配置的影响会有所不同。

trans by 2020-06-25T18:26:43Z

依赖注入-Spring注解@Autowired如何工作?

我遇到了@Autowired的示例:

public class EmpManager {
   @Autowired
   private EmpDao empDao;
}

我很好奇2934923646793793679872如何获得设置,因为没有设置方法,而且它是私有的。

trans by 2020-06-23T00:39:50Z

何时使用依赖注入

最近几天,我有一种感觉,依赖注入实际上应该称为“我不能下定决心”模式。 我知道这听起来很愚蠢,但这确实是我为什么要使用依赖注入(DI)的原因。 经常有人说我应该使用DI来实现更高水平的松耦合,而我得到了这一部分。 但是实际上……一旦我选择使用MS SQL或MySQL,我应该多久更改一次数据库。

有没有人有一些非常令人信服的理由来说明为什么要采用DI?

trans by 2020-06-20T15:38:06Z

1 2 3 4 5 6 下一页 共6页