Хеш-код запроса области Spring

1

Весной, когда в области видимости компонента "запрос" для запроса EACH будет создан новый объект. Я хочу проверить это, но для каждого запроса я получаю то же значение хэш-кода.

Question-

1. Should'nt the hash code value should be different since new object is generated.

Output for 4 http requests using Chrome and IE browser

emp hashcode == 172261326
emp hashcode == 172261326
emp hashcode == 172261326
emp hashcode == 172261326


@Controller
@RequestMapping("/welcome")
public class HelloController {
    @Autowired
    private Employee emp;

    public Employee getEmp() {
        return emp;
    }

    public void setEmp(Employee emp) {
        this.emp = emp;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String printWelcome(ModelMap model) {
        System.out.println("emp hashcode == " + emp.hashCode());
        emp.
        model.addAttribute("message", "Spring 3 MVC Hello World");
        return "hello";
}




@Component
@Scope(value="request")
public class Employee {
    private String fname;
    private int age;
    public String getFname() {
        return fname;
    }
    public void setFname(String fname) {
        this.fname = fname;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
  • 2
    Обратите внимание, что нет гарантии, что каждый объект имеет уникальный хэш-код; два разных объекта могут иметь одинаковый хеш-код. Не пишите программы, которые полагаются на разные объекты, всегда имеющие разные хеш-коды.
Теги:
spring
spring-mvc

1 ответ

2
Лучший ответ

В зависимости от выбранного режима прокси, Spring предоставит перехватчик для метода hashCode. Обычно это делегирование вызова вызываемому объекту. Вы думаете, что в этом случае рекомендуемым объектом будет фактический объект Employee, но вы ошибаетесь. На самом деле Spring предоставляет источник SimpleBeanTargetSource который знает, как получить свой бобовый SimpleBeanTargetSource.

Там только один объект SimpleBeanTargetSource, поэтому вы всегда получаете тот же hashCode.

  • 0
    Я не установил режим прокси. Где я могу проверить режим прокси?
  • 0
    @ user1050619 Это член типа @Scope называемый proxyMode . По умолчанию используется ScopedProxyMode.DEFAULT . При request bean-объектов bean вы, вероятно, должны установить для него значение TARGET_CLASS (CGLIB) или INTERFACES если ваш тип реализовывал интерфейс (прокси-серверы JDK).
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню