전용 생성자가 있는 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
'it-source' 카테고리의 다른 글
볼 데이터를 보내는 동안 JsonMappingException을 가져오는 중 (0) | 2023.08.29 |
---|---|
PowerShell은 어떤 언어입니까? (0) | 2023.08.29 |
단추를 클릭하여 표 행의 내용 가져오기 (0) | 2023.08.29 |
도커 컨테이너로 호스트 포트 전달 (0) | 2023.08.29 |
jQuery를 사용하여 형제 요소를 선택하려면 어떻게 해야 합니까? (0) | 2023.08.24 |