it-source

전용 생성자가 있는 Java Springbean

criticalcode 2023. 8. 29. 20:41
반응형

전용 생성자가 있는 Java Springbean

봄에 콩 클래스에 공용 생성자가 없고 개인 생성자만 있는 것이 가능합니까? 콩이 생성될 때 이 개인 생성자가 호출됩니까?감사해요.

예, Spring은 개인 생성자를 호출할 수 있습니다.가시성에 관계없이 올바른 인수를 가진 생성자를 찾으면 반사를 사용하여 생성자에 액세스할 수 있도록 설정합니다.

IoC 컨테이너에서 기본 생성자에 의존하지 않고 언제든지 공장 방법을 사용하여 콩을 만들 수 있습니다. 인스턴스 팩토리 방법을 사용한 인스턴스화:

<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="com.foo.DefaultServiceLocator">
  <!-- inject any dependencies required by this locator bean -->
</bean>

<!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
      factory-bean="serviceLocator"
      factory-method="createInstance"/>

이렇게 하면 콩에 기본값이 아닌 생성자를 사용할 수 있고 공장 방법 콩에 대한 종속성도 주입할 수 있다는 장점이 있습니다.

예, 개인 건설자는 봄까지 호출됩니다.내 코드를 고려합니다.

Bean 정의 파일:

<bean id="message" class="com.aa.testp.Message">
        <constructor-arg index="0" value="Hi Nice"/>
    </bean>

콩류:

package com.aa.testp;

public class Message {

    private String message;

    private Message(String msg) {
       // You may add your log or print statements to check execution or invocation
        message = msg;
    }

    public String getMessage() {
        return message;
    }

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

    public void display() {
        System.out.println(" Hi " + message);
    }

}

위 코드는 정상적으로 작동합니다.그래서 봄은 개인 생성자를 호출했습니다.

예! 스프링은 개인 생성자에게 접근할 수 있습니다.아래 코드처럼 내부적으로 작동할 것입니다.

 try {
    Class clazz = Class.forName("A"); // A - Fully qualified class name
    Constructor constructor[] = clazz.getDeclaredConstructors();
    constructor[0].setAccessible(true);
    A a = (A) constructor[0].newInstance();
 }
 catch (Exception e) {
        e.printStackTrace();
 }

일반적으로 이러한 콩에는 정적 공장법이 있습니다. 봄에 해당 콩의 인스턴스를 얻기 위해 해당 방법을 지정할 수 있습니다.여기에서 3.3.1.3을 참조하십시오.이것은 시야 제한에 어긋나기보다는 봄이 추천하는 방법입니다.

Spring은 개인 생성자를 Bean scope로 호출하지 않습니다.그러면 아래 오류가 발생합니다.

이 문제의 일반적인 원인에는 최종 클래스 또는 보이지 않는 클래스 사용이 포함됩니다.중첩된 예외는

자바.java.java잘못된 인수예외:클래스에 보이는 생성자가 없습니다.

언급URL : https://stackoverflow.com/questions/7254496/java-spring-bean-with-private-constructor

반응형