2013-05-17 2 views
0

Рассмотрим следующую конфигурацию@scope («прототип») не работает должным образом

public class MainApp { 
     public static void main(String args[]){ 

      ApplicationContext ac=new ClassPathXmlApplicationContext("src/Beans.xml"); 
      HelloWorld obj1=(HelloWorld) ac.getBean("helloWorld"); 
      obj1.setMessage("OBJ1"); 
      HelloWorld obj2=(HelloWorld) ac.getBean("helloWorld"); 
      //obj2.setMessage("OBJ2"); 
      System.out.println(obj1.getMessage()); 
      System.out.println(obj2.getMessage()); 
     } 
    } 

    @Scope("prototype") 

    public class HelloWorld { 
    String message; 
     public String getMessage() { 
      return "Your Message:"+message; 
     } 
     public void setMessage(String message) { 
      this.message = message; 
     } 
     } 


    <?xml version="1.0" encoding="UTF-8"?> 
    <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-3.0.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
       <context:annotation-config /> 
       <context:component-scan base-package="SpringDemo.src" /> 
       <bean id="helloWorld" class="src.HelloWorld"> 
      </bean> 
      </beans> 

Если я не ошибаюсь, это показывает поведение сферы Singleton. кто-то может сообщить мне, почему он не ведет себя как «прототип»?

+0

имя класса 'src.HelloWorld' неверно. Вам не нужно указывать каталог 'src' как' package' –

+0

Если я его удалю, он показывает ошибку Невозможно найти класс [HelloWorld] для bean с именем 'helloWorld', определенным в ресурсе пути к ключу [src/Beans.xml] ; Я получаю вывод, но его для Singleton scope, а не для прототипа – Aashish

+0

@ Ааши, каково именно поведение, которое вы видите? – soulcheck

ответ

4

У вас есть этот <bean id="helloWorld" class="src.HelloWorld"> в конфигурации xml. Если поля не задано, scope по умолчанию - singleton. Конфигурация xml отменяет аннотацию. Удалите @Scope("prototype") и добавьте scope="prototype" в xml.

+0

Но Евгений, я хочу, чтобы определить область с помощью аннотаций – Aashish

+0

Затем используйте только аннотации и удалить определение XML боба –

+0

Если Я удаляю его, я получаю сообщение об ошибке Исключение в потоке «main» org.springframework.beans.factory.NoSuchBeanDefinitionException: не существует bean с именем «helloWorld» – Aashish

Смежные вопросы