DAO에 주석을 사용하여 Sessionfactory 주입
3278 단어 Spring 프레임
대오의 주석에 대해 가장 큰 장애는 주석을 통해sessionfactory를 주입하는 것이다.
Dao는 HibernateDao Support에서 계승된 것입니다.sessionfactory는 HibernateDao Support에서 나온 것입니다.HibernateDao Supprot의sessionfactory 속성을 수정할 수 없습니다.final 형식의setSessionfactory 방법을 다시 쓸 수 없기 때문에sessionfactory를 주입하려면 다른 방법을 강구해야 합니다.
어떤 방법이든 본질적으로sessionfactory를HibernateDao Supprot의sessionfactory에 부여하는 것이다. 그래야만HibernateDao Support의 어떤 방법도 임의로 사용할 수 있다.
첫 번째 방법: @Resouce--이름별 주입(@Autowired--유형별 주입)을 통해 주입하고 방법체 내용을 실행합니다
[java]
view plain
copy
?
HibernateDaoSupprot의 메서드 유형은 final
public final void setSessionFactory(SessionFactory sessionFactory) {
if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
this.hibernateTemplate = createHibernateTemplate(sessionFactory);
}
}
public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
해결 방법:
@Transactional
@Repository("baseLocationDao")
public class BaseLocationDaoImpl extends HibernateDaoSupport implements LocationDao{
private Logger logger = LoggerFactory.getLogger(BaseLocationDaoImpl.class);
@Resource
public void setMySessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
}
두 번째 방법: 위의 @Resource 주석은 사실 두 가지 효과가 있다. 하나는 이 방법이dao실례화할 때 실행해야 한다는 것을 의미하고, 다른 하나는 하나의sessionfactory를 주입하는 방법이다.양자 합병은 최종적으로 주입된sessionfactory를 초류 중의sesseionfactory 속성에 부여하여 유사한 주입 결과를 얻어 초류 중의 각종 방법을 직접 사용할 수 있어 지장이 없다.그럼 이 두 번째 방법은 첫 번째 방법은 두 가지 효과를 분리해서 진행하는 것이다.
@Repository
public class TestDAO Impl extends Hibernate Dao Support implements ItestDAO {/** mySessionFactory 주입 */@Autowired@Qualifier("mySessionFactory")/****** 주입****/protected SessionFactory mySessionFactory;@PostConstruct/******bean 인스턴스화 시 이 메서드 *******/protected void injectSessionFactory () {super.setSessionFactory (mySessionFactory); }
}
이 방법은 두 단계로 나뉘어 한 단계는 주입하고 한 단계는 값을 부여한다.
세 번째 방법: HibernateDao Support 클래스를 계승하는 것은 대부분이 HibernateTemplate 클래스의 각종 방법을 사용하기 위해서이다. 그러면 계승 방식이 아니라 조합 방식을 통해 이 목적을 달성할 수 있다.
public class TestDaoImp implements ITestDao{
HibernateTemplate hibernateTemplate;
@Resource
public void setMysessionFactory(SessionFactory sessionFactory){
this.hibernateTemplate = new HibernateTemplate(mySessionFactory);
}
public HibernateTemplate getHibernateTemplate(){ return hibernateTemplate;
}}
이 방법으로 getHibernateTemplate () 방법을 인용하여 사용할 수 있습니다.
마찬가지로 두 번째 방법에 따라 다음과 같이 바꿀 수 있다.
@Autowired@Qualifier("mySessionFactory")/****** 주입****/protected SessionFactory mySessionFactory; @PostConstruct/******bean 인스턴스화 시 이 메서드 *******/protected void injectHibernateTemplate() {this.hibernateTemplate = new HibernateTemplate(mySessionFactory);
네 번째 방법;위와 마찬가지로 모두 조합 방식이지만 HibernateDao Support의 하위 클래스를 주입합니다. (Hibernatedaosupport가 xml에서 bean으로 직접 설정할 수 있는지 모르겠습니다.) 이 하위 클래스는 xml에서 bean으로 설정됩니다.
xml에서 이 bean을 설정한 다음 HibernateDao Support를 조합해서 인용해서 bean을 주입하고 그 방법을 직접 사용할 수 있습니다.