举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > spring bean范围 Spring教程 - Spring Bean范围

spring bean范围 Spring教程 - Spring Bean范围

2023-04-14 06:20 Spring教程

spring bean范围 Spring教程 -  Spring Bean范围

spring bean范围 Spring教程 - Spring Bean范围

spring bean范围

Spring教程 - Spring Bean范围


当在Spring xml配置中定义Java bean或使用Spring注释时,我们可以将Java bean标记为 singleton 原型

如果一个Java bean被标记为singleton,每次我们调用获取bean,我们得到相同的实例。

如果一个Java bean被标记为原型,每次我们将得到一个新的实例。

Java Bean

以下代码定义了具有String类型属性的Java bean。

package com.www..cnmon;
public class MyService 
{
  String message;
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
}


单身

如果在bean配置文件中未指定bean作用域,则默认为singleton。

<beans xmlns="http://www.springframework.org/schema/beans"
  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-2.5.xsd">
       <bean id="customerService" 
            class="com.www..cnmon.MyService" />
</beans>

这里是运行上面定义的xml配置的代码。

package com.www..cnmon;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App 
{
    public static void main( String[] args )
    {
      ApplicationContext context = 
                 new ClassPathXmlApplicationContext(new String[] {"SpringBeans.xml"});
      MyService customerA = (MyService)context.getBean("customerService");
      customerA.setMessage("Message by customerA");
      System.out.println("Message : " + customerA.getMessage());
      //retrieve it again
      MyService custB = (MyService)context.getBean("customerService");
      System.out.println("Message : " + custB.getMessage());
    }
}

输出

Message : Message by customerA
Message : Message by customerA

上面的代码从 ApplicationContext 中获取两次 MyService 。并且它在第一次调用后为消息设置一个String值。

从输出我们可以看到getMessage()调用都返回相同的消息,这意味着ApplicationContext使用 MyService 的一个副本。

如果bean是Spring IoC容器中的单例范围,getBean()将总是返回相同的实例。


Download Java2s_Spring_Singleton_Scope.zip


原型

如果bean是Spring IoC容器中的单例范围,getBean()将总是返回相同的实例。...

<beans xmlns="http://www.springframework.org/schema/beans"
  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-2.5.xsd">
   <bean id="customerService" class="com.www..cnmon.MyService" 
         scope="prototype"/>
</beans>

再次运行

再次运行...


Download Java2s_Spring_Prototype_Scope.zip

Bean作用域注释

以下代码显示了如何使用注释来标记bean范围。

package com.www..cnmon;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@Service
@Scope("prototype")
public class MyService {
  String message;
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
}

以下代码显示如何启用自动组件扫描。

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd">
       <context:component-scan base-package="com.www..cnmon" />
</beans>

这里是新的App.java类来运行上面的配置。 customerService 更改为 myService 。Spring自动从类名创建一个bean名称,小写第一个信。

package com.www..cnmon;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App 
{
    public static void main( String[] args )
    {
      ApplicationContext context = 
                 new ClassPathXmlApplicationContext(new String[] {"SpringBeans.xml"});
      MyService customerA = (MyService)context.getBean("myService");
      customerA.setMessage("Message by customerA");
      System.out.println("Message : " + customerA.getMessage());
      //retrieve it again
      MyService custB = (MyService)context.getBean("myService");
      System.out.println("Message : " + custB.getMessage());
    }
}

再次运行


Download Java2s_Spring_Beans_Scope_Annotation.zip
阅读全文
以上是名动网为你收集整理的spring bean范围 Spring教程 - Spring Bean范围全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们