[SPRING] Spring은 모든 빈이 기본 생성자를 필요로 하는가?
SPRINGSpring은 모든 빈이 기본 생성자를 필요로 하는가?
내 auditRecord 클래스에 대한 기본 생성자를 만들고 싶지 않습니다.
그러나 봄이 주장한다.
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'auditRecord' defined in ServletContext resource
[/WEB-INF/applicationContext.xml]:
Instantiation of bean failed;
nested exception is org.springframework.beans.BeanInstantiationException:
Could not instantiate bean class [com.bartholem.AuditRecord]:
No default constructor found;
nested exception is
java.security.PrivilegedActionException:
java.lang.NoSuchMethodException:
com.bartholem.AuditRecord
이게 정말 필요한가요?
해결법
-
==============================
1.아니요, 기본 (arg가없는) 생성자를 사용할 필요가 없습니다.
아니요, 기본 (arg가없는) 생성자를 사용할 필요가 없습니다.
빈은 어떻게 정의 했습니까? bean에게 다음 중 하나와 같은 것을 인스턴스화하도록 Spring에게 말했던 것처럼 들린다.
<bean id="AuditRecord" class="com.bartholem.AuditRecord"/> <bean id="AnotherAuditRecord" class="com.bartholem.AuditRecord"> <property name="someProperty" val="someVal"/> </bean>
어디에서 생성자 인수를 제공하지 않았습니다. 이전에는 기본 (또는 arg 없음) 생성자가 사용됩니다. 인수를 취하는 생성자를 사용하려면 constructor-arg 요소를 사용하여 인수를 지정해야합니다.
<bean id="AnotherAuditRecord" class="com.bartholem.AuditRecord"> <constructor-arg val="someVal"/> </bean>
응용 프로그램 컨텍스트에서 다른 bean을 참조하려는 경우 val 속성이 아닌 constructor-arg 요소의 ref 속성을 사용하여 수행 할 수 있습니다.
<bean id="AnotherAuditRecord" class="com.bartholem.AuditRecord"> <constructor-arg ref="AnotherBean"/> </bean> <bean id="AnotherBean" class="some.other.Class" />
-
==============================
2.nicholas의 대답은 XML 구성에 대한 돈에 맞습니다. 주석을 사용하여 빈을 구성 할 때 생성자 주입을 수행하는 것이 더 간단 할뿐만 아니라 훨씬 더 자연스러운 방법이라고 지적하고 싶습니다.
nicholas의 대답은 XML 구성에 대한 돈에 맞습니다. 주석을 사용하여 빈을 구성 할 때 생성자 주입을 수행하는 것이 더 간단 할뿐만 아니라 훨씬 더 자연스러운 방법이라고 지적하고 싶습니다.
class Foo { private SomeDependency someDependency; private OtherDependency otherDependency; @Autowired public Foo(SomeDependency someDependency, OtherDependency otherDependency) { this.someDependency = someDependency; this.otherDependency = otherDependency; } }
-
==============================
3.생성자 기반 주입을 수행 할 수 있습니다 (예 : 여기에있는 문서에서 가져온 것).
생성자 기반 주입을 수행 할 수 있습니다 (예 : 여기에있는 문서에서 가져온 것).
<bean id="foo" class="x.y.Foo"> <constructor-arg ref="bar"/> <constructor-arg ref="baz"/> </bean>
그러나 그것이 효과가 있을지 확신하지 못합니다.
JavaBean을 정의하는 경우 규칙을 따라 public no-arg 생성자를 배치해야합니다.
from https://stackoverflow.com/questions/7492652/does-spring-require-all-beans-to-have-a-default-constructor by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Maven 클리닝 오류 - 요청 된 프로필 "pom.xml"이 존재하지 않아 활성화 할 수 없습니다. (0) | 2019.01.05 |
---|---|
[SPRING] SPRING REST : 다중 부분 경계가 발견되지 않아 요청이 거부되었습니다. (0) | 2019.01.05 |
[SPRING] Spring MVC에서 Form없이 Multipart 사용하기 (0) | 2019.01.05 |
[SPRING] Spring 데이터 Solr 다중 코어 및 저장소 (0) | 2019.01.05 |
[SPRING] 런타임 스프링에 삽입 할 구현 선택 (0) | 2019.01.05 |