[SPRING] Hibernate에 의해로드 된 엔티티로 Spring을 통해 필드 주입
SPRINGHibernate에 의해로드 된 엔티티로 Spring을 통해 필드 주입
Hibernate에 의해 DB에서로드 된 bean에서 Spring을 통해 특정 속성을 주입하는 방법을 찾고있다.
식
class Student {
int id; //loaded from DB
String name; //loaded from DB
int injectedProperty; //Inject via Spring
}
Hibernate가 Student 클래스의 객체를 생성 할 때마다 어떤 applicationContext 파일에 정의 된 일부 속성이 객체 생성과 함께 삽입되도록 Spring을 설정할 수 있습니까?
해결법
-
==============================
1.@Configurable 주석으로 AspectJ 클래스를 짜는 기능을 사용하기위한 기능이있다. 이것은 Hibernate와 같은 것을 사용하여 리플렉션을 통해 인스턴스화 된 객체를 포함하여, Spring 의존성을 가진 주석 된 클래스의 새로운 인스턴스를 자동 와이어합니다.
@Configurable 주석으로 AspectJ 클래스를 짜는 기능을 사용하기위한 기능이있다. 이것은 Hibernate와 같은 것을 사용하여 리플렉션을 통해 인스턴스화 된 객체를 포함하여, Spring 의존성을 가진 주석 된 클래스의 새로운 인스턴스를 자동 와이어합니다.
일부 클래스 로딩 마법이 필요하므로 서버 플랫폼과의 호환성에 따라 다릅니다.
-
==============================
2.aspectj 방식이 작동하는 동안 표준 스프링 / 최대 절전 모드는 LoadEventListener를 등록하는 것입니다 (자세한 내용은 최대 절전 모드 코어 참조, 스프링 참조 및이 스레드 참조)
aspectj 방식이 작동하는 동안 표준 스프링 / 최대 절전 모드는 LoadEventListener를 등록하는 것입니다 (자세한 내용은 최대 절전 모드 코어 참조, 스프링 참조 및이 스레드 참조)
여기 스프링 sessionfactory bean 정의에서 찍은 것이다.
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> ... <property name="eventListeners"> <map> <entry key="post-load"> <bean class="com.foo.spring.MyLoadListener"></bean> </entry> </map> </property> </bean>
여기에 LoadEventListener가 있습니다.
public class MyLoadListener implements LoadEventListener{ public void setSpringManagedProperty(String springManagedProperty){ this.springManagedProperty = springManagedProperty; } private String springManagedProperty; @Override public void onLoad(LoadEvent event, LoadType loadType) throws HibernateException{ if(MyEntity.class.getName().equals(event.getEntityClassName())){ MyEntity entity = (MyEntity) event.getInstanceToLoad(); entity.setMyCustomProperty(springManagedProperty); } } }
엄마 봐, aspectj는 필요 없어.
-
==============================
3.한 가지 방법은 맞춤형 사용자 유형을 정의하고 거기에있는 스프링 구성에서 속성에 액세스하는 것입니다. 그러나 나는 당신이 다른 사람들로부터 훨씬 더 좋은 답을 얻을 것이라고 생각합니다. :)
한 가지 방법은 맞춤형 사용자 유형을 정의하고 거기에있는 스프링 구성에서 속성에 액세스하는 것입니다. 그러나 나는 당신이 다른 사람들로부터 훨씬 더 좋은 답을 얻을 것이라고 생각합니다. :)
-
==============================
4.엔터티에 대한 최대 절전 모드 DAO 빈에 종속성을 삽입하고 엔터티에 대한 속성을 DAO에서 반환하기 전에 설정할 수 있습니다.
엔터티에 대한 최대 절전 모드 DAO 빈에 종속성을 삽입하고 엔터티에 대한 속성을 DAO에서 반환하기 전에 설정할 수 있습니다.
DAO에서 엔터티를로드하는 경우에만 작동합니다.
from https://stackoverflow.com/questions/3505421/injecting-fields-via-spring-into-entities-loaded-by-hibernate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 구성 (0) | 2019.02.01 |
---|---|
[SPRING] 프록시가 작동하지 않는 CGLIB 서비스의 자산 조롱 (0) | 2019.02.01 |
[SPRING] Spring JDBC 지원 및 대규모 데이터 세트 (0) | 2019.02.01 |
[SPRING] 스프링 부트에서 Postgres 연결이 닫혔다. (0) | 2019.02.01 |
[SPRING] CDI의 Instance 또는 Guices Provider에 해당하는 Spring은 무엇입니까? (0) | 2019.02.01 |