[SPRING] 개인 생성자가있는 Java Spring bean
SPRING개인 생성자가있는 Java Spring bean
빈에 대한 클래스에는 public 생성자가 없지만 private 클래스 만 사용할 수 있습니까? Bean 생성시이 개인 생성자가 호출됩니까? 감사.
해결법
-
==============================
1.예, Spring은 private 생성자를 호출 할 수 있습니다. 가시성에 관계없이 올바른 인수를 사용하여 생성자를 찾으면 리플렉션을 사용하여 액세스 가능한 생성자를 설정합니다.
예, Spring은 private 생성자를 호출 할 수 있습니다. 가시성에 관계없이 올바른 인수를 사용하여 생성자를 찾으면 리플렉션을 사용하여 액세스 가능한 생성자를 설정합니다.
-
==============================
2.IoC 컨테이너의 기본 생성자에 의존하지 않고 항상 factory 메소드를 사용하여 bean을 작성할 수 있습니다. 인스턴스 팩토리 메소드를 사용한 인스턴스화 :
IoC 컨테이너의 기본 생성자에 의존하지 않고 항상 factory 메소드를 사용하여 bean을 작성할 수 있습니다. 인스턴스 팩토리 메소드를 사용한 인스턴스화 :
<!-- 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을 위해 기본이 아닌 생성자를 사용할 수 있고 factory 메소드 bean의 의존성을 주입 할 수 있다는 장점이 있습니다.
-
==============================
3.예, 개인 생성자는 봄에 의해 호출됩니다. 내 코드를 고려해보십시오.
예, 개인 생성자는 봄에 의해 호출됩니다. 내 코드를 고려해보십시오.
빈 정의 파일 :
<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); } }
위의 코드는 정상적으로 작동합니다. 따라서 스프링은 private 생성자를 호출합니다.
-
==============================
4.예 ! Spring은 private 생성자에 접근 할 수있다. 아래 코드와 같이 내부적으로 작동합니다.
예 ! Spring은 private 생성자에 접근 할 수있다. 아래 코드와 같이 내부적으로 작동합니다.
try{ Class c= Class.forName("A"); // A - className Constructor c1[]=c.getDeclaredConstructors(); c1[0].setAccessible(true); A a= (A)c1[0].newInstance(); } catch (Exception e){ e.printStackTrace(); }
-
==============================
5.그러한 bean에는 일반적으로 정적 팩토리 메소드가 있으며, spring에 해당 메소드를 지정하여 해당 bean의 인스턴스를 얻을 수 있습니다. 3.3.1.3 여기를 참조하십시오. 이것은 가시성 제한에 반하는 것이 아니라 Spring에서 권장하는 방식입니다.
그러한 bean에는 일반적으로 정적 팩토리 메소드가 있으며, spring에 해당 메소드를 지정하여 해당 bean의 인스턴스를 얻을 수 있습니다. 3.3.1.3 여기를 참조하십시오. 이것은 가시성 제한에 반하는 것이 아니라 Spring에서 권장하는 방식입니다.
from https://stackoverflow.com/questions/7254496/java-spring-bean-with-private-constructor by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring과 Hibernate로 작업 할 때 persistence.xml이 필요합니까? (0) | 2018.12.30 |
---|---|
[SPRING] Junit을 사용하여 Spring 테스트 세션 범위 bean (0) | 2018.12.30 |
[SPRING] @Transactional을 말할 때마다 체크 된 모든 예외에서 롤백 (0) | 2018.12.30 |
[SPRING] .properties 파일의 속성을 기반으로 Spring 설정 파일을 가져옵니다. (0) | 2018.12.30 |
[SPRING] Spring을 사용하여 JPA EntityManager를 주입하는 방법 (0) | 2018.12.30 |