也许我会得到很多反对票,但对于我来说,是否使用bean这个事实是如此的困惑。假设这个例子
interface ICurrency {
String getSymbol();
}
public class CurrencyProcessor {
private ICurrency currency ;
public CurrencyProcessor(ICurrency currency) {
this.currency = currency;
}
public void doOperation(){
String symbol = currency.getSymbol();
System.out.println("Doing process with " + symbol + " currency");
// Some process...
}
}
所以,要注射ICRENCY impl注射剂,我想我可以用两种方法:
方式一:没有春豆
public class CurrencyOperator {
private ICurrency currency ;
private CurrencyProcessor processor;
public void operateDefault(){
currency = new USDollarCurrency();
processor = new CurrencyProcessor(currency)
this.processor.doOperation();
}
}
@ContextConfiguration(classes = CurrencyConfig.class)
public class CurrencyOperator {
@Autowired private ICurrency currency ;
@Autowired private CurrencyProcessor processor;
public void operateDefault(){
this.processor.doOperation();
}
}
@Configuration
public class CurrencyConfig {
@Bean
public CurrencyProcessor currencyProcessor() {
return new CurrencyProcessor(currency());
}
@Bean
public ICurrency currency() {
return new USDollarCurrency();
}
我真的不明白使用Spring的bean会有什么好处。我读了一些东西,但我发现最多的是关于使用DI的好处,而且据我所知,这两种方式都注入了CurrencyProcessor所需的依赖关系,改变的是我创建和使用对象的方式,我错了吗?所以具体地说,我的问题是:1。在这种情况下使用bean有什么好处?2.为什么我要用Spring而不是像first Way那样手动操作?3.谈性能,这个案例哪个更好?
假设您有两个DAO类一个用于Oracle,第二个用于MySQL,并且这两个类都实现了一个DAO接口。您将一个实现定义为Spring配置文件中的bean。在业务类中,您有一个类型为DAO的属性,而在spring配置文件中,您选择真正的类型wheather Oracle或MySQL进行注入,或者使用spring注释@autowired
这减少了耦合,从Oracle转移到MySQL将变得很容易。
@Service
public class Business {
@Autowired
private Dao daoImpl;
//Business methods that invoks Dao methods
}
在Spring配置文件(XML文件)中使用以下内容:
<bean id="daoImpl" class="app.com.MySQLDaoImpl OR app.com.OracleDaoImpl"/>
默认情况下,Spring创建的Bean是singleton。它们是线程安全的,因为它们是无状态的。当我们希望Spring创建有状态Bean时,我们需要为Bean定义使用原型范围。我们需要为他们解决线程安全问题。当原型Bean注入所有无状态Bean时,它们都会受到污染。所以,我无法想象我们可以在哪里使用原型范围。你能给出一些我们可以/需要使用springbean原型的典型场景吗?还有,我们如何避免对
几乎每个Spring项目都使用spring-beans.xsd(更精确地说是指它)。然而,如果你看一下文件,http://www.springframework.org/schema/beans/spring-beans.xsd,你会发现它是3.2版本,并且没有属性“本地”的定义。 更有趣的是http://www.springframework.org/schema/beans/spring-be
问题内容: 我已经在bean的“销毁方法”中放入了sysout语句。当我运行示例代码时,sysout没有得到输出。这是否意味着未调用销毁方法? 测试类别: 豆 配置文件: 问题答案: 您的示例无效,因为您没有关闭appcontext,只是让程序终止。 调用上下文,您将看到被调用的bean destroy-methods。
那么现在我们叫bean什么?Bean是Foo类型的对象,引用“Foo”,但是Boo类是否被注释为服务,Foo被注释为存储库,也是Bean吗?我使用spring已经有一段时间了,但是这个基本的问题让我很难过,因为我不知道...
问题内容: 更新:添加Maven依赖关系 * 更新:通过添加 Maven依赖关系 解决了该错误* 美好的一天。我有AplicationContext.xml的这一部分 Maven Dep春季和冬眠 但是,当我启动我的应用程序时,它告诉我这个错误 但是我正在使用hibernate4。这是什么魔术?=)我已经尝试过重新部署应用程序,但是结果是一样的 问题答案: 您已经错过了Spring-ORM模块:
我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务。 请开导我。