Tag: dependency injection

将一组依赖项深深嵌套在依赖关系图中

所以这是我的问题: 例如,考虑一下: File有一组Classes ,以及Imports 。 Class具有一组Instance Methods , Static Methods和Variables 。 Instance Method具有Parameters和Body 。 Body有… yadayada。 在以OO方式对其进行建模时,问题是Body可能需要许多特定的依赖项才能运行: class Body { … public Body(Dependency1, Dependency2, Dependency_n, …) { } … } 运行时所有其他类都不需要。 我在这里提出的问题是如何将这些依赖项添加到Body而不必通过File , Class和InstanceMethod传递所有这些依赖项。 我可以创建一个BodyFactory ,但问题仍然是一样的,因为我必须通过File , Class和InstanceMethod传递BodyFactory ,如果我没有遗漏任何东西。 如何在不诉诸单身的情况下解决这个问题?

通过Producer类将RequestScoped CDI Bean注入ApplicationScoped CDI Bean

本文解释了您可以将RequestScoped bean注入到ApplicationScoped bean中,并且客户端代理将在请求期间指向正确的实例: 在CDI中更大范围的bean实例中注入更短范围的Bean实例 – 它是如何工作的? 当使用一个单独的生成器类来执行一些额外的处理并生成RequestScoped bean时,这是如何工作的? 在部署到应用程序服务器后,由于不明确的依赖关系,我得到一个DeploymentException,因为托管bean和我的producer方法都是合格的。

在Android中“注入一切”是一种不好的做法吗?

关于dependency injection的研究我发现一些方法建议注入所有东西,而另一些方法则说没有必要这样做 。 在我目前的项目中,关于dependency injection的经验法则是“ 如果该类是由我创建的,那么我可以将其注入 ”。 换句话说,只有像SimpleDateFormat , ArrayList , HashMap这样的类才是我项目中的新function。 我做这种方法的意图是,一旦在Activity调用Injector.getApplicationComponent().inject(this) ,我就可以@Inject任何类。 基本上我的所有类都有一个带@Inject的非args构造函数。 我主要使用DI,因为我认为一旦new运算符由Dagger生成的类专门使用,它将改善性能和内存使用。 但我读了Dagger 1开发人员的post ,说DI对性能没有影响,用法基本上是为了减少样板。 第一个问题是: Dagger 2在Android应用程序中没有任何性能优势? 我的项目运行没有问题,我认为“注入一切”的方法有助于更好地组织,尽管存在一些缺点。 使用此方法的一个示例是以下类: public class TimelineEntryAdapter { @Inject Provider mTwitterProvider; @Inject Provider mInstagramProvider; @Inject Provider mFacebookProvider; @Inject TimelineEntryComparator mComparator; @Inject public TimelineEntryAdapter() { } 第二个问题是: 在Android中注入所有东西是不好的做法? 如果第二个问题的答案是“否”,那么有一种更好的方法来处理非args构造函数来创建类? 因为当我用@Inject注释创建一个非args构造函数并且一个类需要一些参数来处理时,我必须使用setters : public class SavelArtist { private […]

Grails与另一个Spring应用程序集成 – dataSource被重载

我目前正在为现有的基于Spring的应用程序构建CRUD工具。 该应用程序作为JAR库包含在Grails应用程序中,似乎工作正常。 为了利用库自己的spring上下文,我曾经通过以下方式加载它: def ctx = new ClassPathXmlApplicationContext( ‘classpath:/applicationContextName.xml’) 在我的服务。 不幸的是,上下文构建了自己的数据源(库的默认值),这是不好的,因为我需要使用Grails中定义的dataSource。 因此,我的解决方案是通过向grails-app \ conf \ spring \ resources.xml文件添加导入,将库的spring配置包含在Grails上下文中。 这似乎有效(因为所有bean都被加载到相同的上下文中,现在我可以使用def variableName直接将bean自动装入我的服务类中。 不幸的是,库的spring配置中定义的dataSource正在重载我的Grails DataSource.groovy文件中定义的dataSource! 有没有什么方法可以告诉Grails首先加载libary的spring配置,然后它被其余的Grails配置覆盖(因此使用Grails的DataSource)? 谢谢你的帮助, 詹姆士 … 作为一个临时措施,我已经删除了依赖性的spring配置文件中的dataSource条目,并且它的bean已经注入了由Grails配置创建的dataSource – 这不是理想的,因为我必须做一个’特殊’构建依赖jar。

Wicketdependency injection

我在Wicket有一个带有表单的页面,其中表单需要合作者完成其工作。 合作者注入(我正在使用Guice),看起来像: public class RegistrationPage extends WebPage { @Inject public RegistrationPage(RegistrationService service) { this.service = service; add(new RegistrationForm()); } private class RegistrationForm extends Form { public RegistrationForm() { // setup } protected void onSubmit() { service.doSomething(); } } } 我不喜欢将RegistrationService注入到RegistrationPage中的想法,因为它只是需要它的RegistrationForm。 我可以更改RegistrationForm以接收RegistrationService: public RegistrationForm(RegistrationService service) { this.service = service; } 并从RegistrationPage中删除该字段,但仍然使用RegistrationPage进行传递。 我想我要问的是这样做的最佳做法是什么? 这样做可以,或者将RegistrationForm本身注入到页面中可能更好: public class RegistrationPage […]

使用基于注释的配置创建延迟初始化的Spring bean

我使用Spring的@Component注释来配置Spring 3.0应用程序中的许多bean。 我想知道是否可以懒惰地构建一些这些豆 – 特别是prototype豆?

OpenEJB本地客户端注入失败

请注意,我正在非常仔细地反映这里给出的例子 。 事实上,我的情况有点简单,因为我现在甚至没有使用持久性单元进行测试。 我的测试项目提供了一个简单的MDB和一个会话bean; MDB和会话bean都正常加载,并且可以在没有注入的情况下成功测试(以约束的方式)。 在我的unit testing中使用@LocalClient注释的建议注入失败,出现已知错误: javax.naming.NamingException: Unable to find injection meta-data for [your-class]. Ensure that class was annotated with @org.apache.openejb.api.LocalClient and was successfully discovered and deployed. See http://openejb.apache.org/3.0/local-client-injection.html 当我访问此页面时,它通知我可能需要为我的测试用例上下文设置添加额外的属性。 所以现在看起来像: @Override public void setUp() throws Exception { initializeContext(); } public void initializeContext() { Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY, “org.apache.openejb.client.LocalInitialContextFactory”); // the property […]

如何在Play中的静态方法中使用play.cache.CacheApi! 框架2.4.2

我有一个play框架应用程序,我已经迁移到play框架2.4.2上运行。 它为javascript / html前端提供RESTful API。 现在我在引入缓存方面遇到了一些问题。 LibraryController(将JSON / HTTP请求转换为JSON / HTTP响应): public class LibraryController extends Controller { public Result getBook(String isbn) { Book book = LibraryManager.getBook(isbn); BookDto bookDto = DtoMapper.book2BookDtos(book); return ok(Json.toJson(bookDto)); } } LibraryManager(将域模型请求转换为域模型响应): public class LibraryManager { @Inject CacheApi cache; public static Book getBook(String isbn) { Book book = cache.get(isbn); // … } […]

dependency injectionResourceFilter不起作用?

我有一堆JAX-RS资源,为新的WebService提供API。 为了理解发生了什么,我想将有关每个请求的信息存储在数据仓库中。 在我看来,这是一个跨领域关注的完美例子,可以由ResourceFilter实现,对吗? 所以我构建了一个DataWarehouseService ,它应该在DB中存储东西: @Stateless @LocalBean public class DataWarehouseService { public void logApiCall(ContainerRequest cr) { // get interesting fields from request, store in DB … } } 这是我的filter: public class LoggingResourceFilter implements ResourceFilter { Logger log = Logger.getLogger(this.getClass().getName()); @EJB DataWarehouseService dwh; @Override public ContainerRequestFilter getRequestFilter() { return new ContainerRequestFilter() { @Override public ContainerRequest filter(ContainerRequest […]

需要一些帮助才能理解Anotations – Spring annotations

我正在努力学习Spring和Hibernate,我真的很难理解Annotations以及它们是如何工作的。 我在互联网上看到的大部分示例都是基于注释的示例,因此我需要先了解注释的工作原理才能学习Spring或Hibernate 我知道它们是什么以及它们的用途。 我知道他们会替换xml配置。 即您可以使用注释在Java代码中直接配置bean。 我不明白的是如何使用它们以及何时可以使用它们。 试着理解如何做到这一点我认为如果我看到两者之间的差异会有所帮助。 我这里有一个简单的Spring程序。 如果我要将此示例程序转换为使用注释我需要做什么? 我想这样做的原因是因为我在下面提供的程序是我非常理解的程序(我正在阅读的Spring in Action书中的一个例子)。 如果它被转换为注释版本,我将了解注释的使用方式和位置。 有什么建议么? 提前致谢 instrumentalist.xml 工具主义界面 package com.sia.ch1.instrumentalist; public interface Instrument { void play(); } 乐器演奏者 package com.sia.ch1.instrumentalist; import com.sia.ch1.performer.PerformanceException; import com.sia.ch1.performer.Performer; public class Instrumentalist implements Performer{ private Instrument instrument; private String song; public Instrumentalist(){} public void perform() throws PerformanceException{ System.out.print(“Playing ” + song […]