DAO에 주석을 사용하여 Sessionfactory 주입

3278 단어 Spring 프레임
대부분의 경우 우리는 xml 설정 방식을 통해DAO에sessionfactory를 주입하여 bean을 실례화한다. 때로는DAO의 실례화는 주석을 통해 이루어진다.
 
대오의 주석에 대해 가장 큰 장애는 주석을 통해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
print
?
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을 주입하고 그 방법을 직접 사용할 수 있습니다.

좋은 웹페이지 즐겨찾기