Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 3.0中@Value注释的不便之处_Spring_Annotations - Fatal编程技术网

Spring 3.0中@Value注释的不便之处

Spring 3.0中@Value注释的不便之处,spring,annotations,Spring,Annotations,我想知道如果我在属性上添加@Value注释,包含此属性的类不能被另一个具有不同值的类使用,例如: MyClassUtil.java @Value("${some.value}") private int _myProperty; 当然,还有一个module.properties包含: some.value=10 另一个类ClassA.java希望使用这个值为10的类。好的,没问题。 但是另一个类ClassB.java想要使用这个类,但是有另一个值:20。如果我没有弄错的话,我不能这么做。 因

我想知道如果我在属性上添加@Value注释,包含此属性的类不能被另一个具有不同值的类使用,例如:

MyClassUtil.java

@Value("${some.value}")
private int _myProperty;
当然,还有一个module.properties包含:

some.value=10
另一个类ClassA.java希望使用这个值为10的类。好的,没问题。 但是另一个类ClassB.java想要使用这个类,但是有另一个值:20。如果我没有弄错的话,我不能这么做。 因为在@Value-era之前,我可以毫无问题地在moduleContext.xml中声明两个bean


那么,@Value是否会促使您进行一些强耦合呢?

您是对的,注释配置不能是特定于实例的。在bean factory中理解bean定义的概念非常重要

手动bean定义:

  • XML配置中的单个
    元素将导致单个bean定义。多个
    表示多个定义(无论bean类型如何)
  • 类中的单个
    @Bean
    方法导致单个Bean定义。多个
    @Bean
    方法意味着多个定义(与Bean类型无关)
但是,当使用组件扫描时,用类似于
@component
的注释注释的类会自动注册为单个bean定义。您无法通过组件扫描多次注册bean

类似地,注释配置
@Value
@Autowired
等)是类型范围的。您的bean实例总是以相同的效果进行扩充和处理(例如,注入相同的值)。您无法在实例之间更改注释处理行为

这是紧耦合吗这不是一般的理解-bean factory(Spring)仍然可以自由注入它认为合适的任何东西。然而,它更像是一种服务查找模式。这简化了使用特定于域的单例时的生活。应用程序上下文中的大多数bean往往是单例的,其中许多是特定于域的(控制器、服务、DAO)。框架单例(非特定于项目的可重用类)不应使用基于注释的配置-在这个范围内,它是一种不必要的紧耦合


如果需要不同的bean实例,则不应使用注释配置并手动定义bean。

some.value确实有一个值-为什么不使用some.valueA和some.valueB。或者只是删除值注释,如果值不同,则需要两个具有相同键但值不同的属性文件。然后,您可以有两个具有不同属性源的上下文,每个上下文生成类型为
MyClassUtil
的限定bean。