Tag: inversion of control

Simple Spring,将ClasspathApplicationContext用于独立应用程序,如何重用?

如果我有一个独立的主应用程序。 说20节课。 它们都可能需要随时与spring配置(ApplicationContext)定义的bean接口。 我将在主应用程序入口点引导类路径应用程序上下文。 但是,如何重用已经实例化的bean? 例如,将ClasspathApplicationContext设置为单例似乎是一种糟糕的方法,但这就是想法。 我以为我已经看过GlobalContextLocator或类似的东西,但没有看到如何使用它的例子。

弹簧自动assembly和原型范围

我有一个名为Bar的类,带有以下注释: @Configurable(autowire = Autowire.BY_TYPE) 在私有成员上,我有以下注释: @Autowired(required = true) private Foo foo; 在spring配置中,我有一个类Foo的bean。 如果使用scope=”prototype”定义bean,则它不起作用,我得到以下exception: NoSuchBeanDefinitionException:没有为依赖项找到Foo类型的匹配bean:预期至少有1个bean符合此依赖项的autowire候选者 一旦我将注入的bean范围更改为”singleton”它就可以正常工作。 是否允许原型scoped bean的自动接线? 有没有解决方法(除了手动获取bean)? 先谢谢,Avner

使用Hibernate 4的Integrator模式和Spring的dependency injection

我习惯使用Spring来执行dependency injection,如下所示: 然后用Autowired注释我的依赖类,如下所示: public class DependentClass { @Autowired private Dependency dependency; } 但是,随着Hibernate 4.0的变化,我们现在建议使用新的Integrator接口进行服务发现。 这包括为postUpdate , postDelete等触发器添加事件监听postDelete 。 不幸的是,这与通过注释依赖项的dependency injection不能很好地协作。 我有以下设置: 我已定义的集成器将我的监听器添加到ServiceFactory 。 这在META-INF/services/org.hibernate.integrator.spi.Integrator文件中引用。 public class MyIntegrator implements Integrator { private MyListener listener; public MyIntegrator() { listener = new MyListener(); } @Override public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { final EventListenerRegistry eventRegistry = […]

FactoryBeans和Spring 3.0中基于注释的配置

Spring提供了FactoryBean接口,允许对bean进行非平凡的初始化。 该框架提供了许多工厂bean的实现,并且 – 当使用Spring的XML配置时 – 工厂bean很容易使用。 但是,在Spring 3.0中,我找不到一种令人满意的方法来使用带有基于注释的配置的工厂bean(néeJavaConfig)。 显然,我可以手动实例化工厂bean并自己设置任何所需的属性,如下所示: @Configuration public class AppConfig { … @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); factory.setDataSource(dataSource()); factory.setAnotherProperty(anotherProperty()); return factory.getObject(); } 但是,如果FactoryBean实现了任何特定于Spring的回调接口,例如InitializingBean , ApplicationContextAware , BeanClassLoaderAware或@PostConstruct ,则会失败。 我还需要检查FactoryBean,找出它实现的回调接口,然后通过调用setApplicationContext , afterPropertiesSet()等自己实现这个function。 这对我来说感觉很尴尬和反过来:应用程序开发人员不应该实现IOC容器的回调。 有没有人知道使用Spring Annotation配置的FactoryBeans更好的解决方案?

在接口级别解耦两个类意味着什么?

假设我们在包A中有A类,在包B中有B类。 如果类A的对象引用了类B,则说这两个类之间有耦合。 为了解决耦合问题,建议在包A中定义一个接口,该接口由包B中的类实现。然后,类A的对象可以引用包A中的接口。 这通常是“依赖倒置”的一个例子。 这是“在接口级别解耦两个类”的示例。 如果是,那么它如何消除类之间的耦合并在两个类耦合时保留相同的function?

是否有一种优雅的方式将spring托管bean注入java自定义/简单标记

我有一堆使用spring托管bean的java自定义标签..因为我无法找到注入自定义标签的方法,我创建了一个帮助类,为所有spring bean对象提供静态方法“getTheObjectINeedBean()”需要..我根本不喜欢这种方法。 我真的希望能够将spring托管bean注入自定义标记 有办法吗? 就我的研究而言,我知道没有办法做到这一点,因为自定义标签是容器管理的 谢谢, 比利

使用servicelocation而不是构造函数注入来避免编写工厂类的负载是不好的

现在我们使用DI / IOC,当我们需要将额外的参数传递给构造函数时,我们使用工厂类,例如 public class EmailSender { internal EmailSender(string toEmail, string subject,String body, ILogger emailLogger) {…..} } public class EmailSenderFactory { ILogger emailLogger; public EmailSenderFactory(ILogger emailLogger) { this.emailLogger = emailLogger; } public EmailSender Create(string toEmail, string subject, string body) { return new EmailSender(toEmail, subject, body, emailLogger); } } 现在问题在于我们最终创建了一个完整的工厂类,并且人们并不总是知道使用它们(他们有时会自己创建它们)。 编写类的最大负面因素是: public class EmailSender { EmailLogger […]