복붙노트

[SPRING] Spring Framework에서 setter가 어떻게 작동합니까?

SPRING

Spring Framework에서 setter가 어떻게 작동합니까?

저는 봄 프레임 워크에서 새로운 것입니다. 실제로 저는 실제로 봄에 실험을하고있었습니다.

이 HelloWorld.java를 보자.

public class HelloWorld {

    private String messageee;

    public void setMessage(String messageee){
        this.messageee=messageee;
    }

    public void show(){
        System.out.println("message: "+messageee);
    }
}

이 프로그램에서, 나는 messageee라는 이름의 private 변수와 messageee라는 setter로 매개 변수화 된 다음 변수로 선언 된 하나의 변수를 보았습니다. 둘 다 같은 이름을 가지고있는 것을 보았습니다.

Okay .. 이제이 bean 파일을 보자.

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">

    <bean id="helloWorld" class="com.springframework.HelloWorld">
        <property name="message" value="Hello.. This is Spring Framework example."></property>
    </bean>

</beans>

여기에서 콩 태그 내부를 볼 수 있습니다. 속성 이름을 메시지로 선언했습니다. 나는 이해하지 못한다. 내가 messageee라는 이름을주는 것은 다음과 같은 오류를 준다 :

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'helloWorld' defined in class path resource [beans.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'messageee' of bean class [com.springframework.HelloWorld]: Bean property 'messageee' is not writable or has an invalid setter method. Did you mean 'message'?

그러나 나는 그 이름을 메시지로 줄 때. 성공적으로 실행됩니다. 그러나 나는이 비슷한 이름을 가진 어떤 메시지의 방법이나 어떤 종류의 변수를 가지고 있지 않습니다. 그렇다면 세터는 실제로 어떻게 작동합니까? 너 좀 자세히 설명해 줄래?

도움을 주시면 감사하겠습니다!

해결법

  1. ==============================

    1.필드 (또는 인스턴스 변수)를 속성과 혼동하고 있습니다.

    필드 (또는 인스턴스 변수)를 속성과 혼동하고 있습니다.

    속성은 Java Beans 사양에서 오는 용어입니다. bean의 속성 foo는 setFoo ()라는 setter 메소드를 사용하여 getFoo () (또는 boolean은 isFoo ())의 getter 메소드를 사용하여 액세스 할 수있는 데이터입니다.

    이 방법들이 내부적으로하는 일은 변수를 얻거나 설정하는지 여부, 변수의 이름이 foo인지 아니면 다른 것인지에 관계없이 완전히 무관합니다. 중요한 것은 getter / setter의 이름입니다.

    그래서 빈을 정의하고, Spring에게 message라는 속성을 설정하도록하면, Spring은 setMessage ()라는 메소드를 찾을 것이다. Bean 클래스의 private 필드는 신경 쓰지 않습니다.

  2. ==============================

    2.Spring IoC 컨테이너는 Spring에서 의존성 삽입의 선호되는 방법 인 setter injection도 지원한다. Setter 주입은 클래스 파일의 set * 메소드를 사용하여 스프링 XML 구성에서 구성 가능한 속성 이름을 저장합니다.

    Spring IoC 컨테이너는 Spring에서 의존성 삽입의 선호되는 방법 인 setter injection도 지원한다. Setter 주입은 클래스 파일의 set * 메소드를 사용하여 스프링 XML 구성에서 구성 가능한 속성 이름을 저장합니다.

    설정 관점에서 볼 때 setter injection은 값이 설정되는 속성 이름과 함께 bean에 속성으로 할당되기 때문에 읽기가 더 쉽습니다.

    특성 이름을 결정하기 위해 Spring은 JavaBeans Specification을 따른다.

  3. ==============================

    3.우선, 필드를 속성과 혼합합니다. 또한 applicationContext.xml의 속성 이름이 잘못되었습니다 (messageee 여야합니다)

    우선, 필드를 속성과 혼합합니다. 또한 applicationContext.xml의 속성 이름이 잘못되었습니다 (messageee 여야합니다)

    다음 중 하나와 함께 @Autowired 주석을 사용해야합니다.

    1) 필드들, 즉 messageee

    또는

    2) setter 즉 setMessage ()

    당신이 생각한다면 "그게 뭐지?" Bean에 대한 Spring의 기본 기능과 Spring이 POJO (Plain Old Java Objects)를 IoC 프레임 워크를 사용하여 어떻게 구성 할 수 있는지 읽어보십시오. @Autowired에 대해 읽어보십시오 - 스프링에서 자동 와이어 링은 어떻게 작동합니까?

    그럼 당신은 이것으로 잘되어야합니다 :

    <bean id="helloWorld" class="com.springframework.HelloWorld">
        <property name="message" value="Hello.. This is Spring Framework example."></property>
    </bean>
    

    BTW ... 아주 기본적인 자바 프로그램을 사용하여 봄을 들여다 볼 수있는 좋은 접근법 .... 행운을 빌어 요!

  4. from https://stackoverflow.com/questions/28137387/how-setter-works-inside-spring-framework by cc-by-sa and MIT license