`
langgufu
  • 浏览: 2305691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过注解的方式向DAO中注入Sessionfactory

 
阅读更多

大部分时候我们都是通过xml配置方式向DAO中注入sessionfactory来实例化bean,有时候要DAO的实例化是通过注解的方式来实现。

 

对dao注解的话,最大的障碍是如何同时通过注解注入sessionfactory。

 

dao继承自HibernateDaoSupport  ,sessionfactory来自于HibernateDaoSupport 中,我们无法修改HibernateDaoSupprot中的sessionfactory属性进行注解,我们也无法对final类型的setSessionfactory方法进行重写,故而要想把sessionfatory注入就得另外想办法了。

 

无论何种方法,本质上都是把sessionfactory赋给HibernateDaoSupprot中的sessionfactory,只有这样我们才能任意的使用HibernateDaoSupport中的任何方法。

 

第一个方法:通过@Resouce--按名字注入(@Autowired--按类型注入)注入,并执行方法体内容

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 TestDAOImpl extends HibernateDaoSupport implements
  ITestDAO {
 
 /**
  * 注入mySessionFactory
  */
 @Autowired@Qualifier("mySessionFactory") /*****注入*****/
 protected SessionFactory mySessionFactory;
 @PostConstruct /*****bean实例化时执行该方法*******/
 protected void injectSessionFactory(){
  super.setSessionFactory(mySessionFactory);
 }

}

该方法分开两步,一步注入,一步赋值。

 

第三种方法:继承HibernateDaoSupport类,大部分都是为了使用其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);
}

 

第四种方法;同上面一样,都是组合方式,不过注入的是HibernateDaoSupport的子类(hibernatedaosupport能否直接在xml配置为bean我不晓得了),且该子类先在xml中配置为bean。

可以通过先在xml中配置这样一个bean,然后通过组合引用HibernateDaoSupport,注入bean,直接使用其方法。

1
0
分享到:
评论

相关推荐

    SSH注解方式整合小例子

    3. **配置DAO**:使用Spring的`@Repository`注解标记DAO接口,通常会配合`@Autowired`注入SessionFactory或EntityManager。 4. **服务层**:使用`@Service`注解标记服务类,这里会包含业务逻辑,同样可以使用`@...

    一个模拟Spring将SessionFactory注入到HibernateTemplate的小例子

    在Spring框架中,整合Hibernate是常见的操作,Spring通过其强大的依赖注入(DI)特性,能够帮助我们更好地管理和控制SessionFactory以及与Hibernate相关的操作。本示例将深入探讨如何使用Spring将SessionFactory注入...

    SSH2整合程序,使用注解方式,高效开发。可以下来参考学习

    在SSH2整合中,Spring会管理Hibernate的SessionFactory,并通过`@PersistenceContext`注解注入SessionFactory,然后通过SessionFactory获取Session,进而执行数据库操作。这种方式使得数据访问层的代码更加简洁,...

    spring,springMVC,Hibernate全注解案例加dao的封装

    在IT行业中,Spring、SpringMVC和Hibernate是Java企业级应用开发中的三大核心框架,它们分别专注于依赖注入、Web MVC层以及持久层操作。在这个全注解案例中,我们将探讨如何利用这三大框架进行高效、简洁的开发,...

    非注解Springmvc+spring+hibernate 入门实例

    在非注解方式下,你需要在XML配置文件中声明并配置Bean,通过`<bean>`标签指定类名、初始化方法等。例如,你可以定义一个服务接口和其实现类,然后在Spring容器中声明这两个Bean,并通过`<property>`标签设置依赖...

    ssh代码整合基于注解方式的

    2. 在Spring中启用注解配置,配置数据源、SessionFactory,并使用`@ComponentScan`扫描包含Service、DAO的包。 3. 集成Hibernate,配置SessionFactory,并使用`@EntityScan`扫描实体类包。 4. 使用Spring的`@...

    S2SH整合例子 注解配置 JSON 泛型Dao

    在S2SH整合中,比如在Spring中可以使用`@Component`、`@Service`、`@Repository`、`@Controller`等注解声明Bean,而Hibernate可以通过`@Entity`、`@Table`、`@Id`等注解定义实体类。 5. **JSON**:JavaScript ...

    hibernate-4.3.5 与Spring(Spring MVC4.0.4)注解方式集成

    在这个实现类中,可以利用`@Autowired`自动注入SessionFactory。 4. **Service层**:创建Service接口和实现类,通常会使用`@Service`注解。业务逻辑在此处处理,通过DAO接口与数据库交互。 5. **Controller层**:...

    SSH框架注解方式,Maven项目

    在本示例中,我们将探讨如何通过Maven来构建一个基于注解方式的SSH框架。 首先,让我们深入了解SSH框架的每个组件: 1. **Struts2**:作为MVC(模型-视图-控制器)框架,Struts2负责处理HTTP请求并将其路由到相应...

    SSH注解小实例

    4. **实现DAO接口**:在实现类上使用`@Autowired`注解注入SessionFactory,并使用Hibernate的注解API进行数据库操作,如`@Transactional`,`Session`,`Query`等。 5. **创建Service接口和实现**:Service层是业务...

    SSH三大框架整合 struts2+hibernate+spring (全注解方式进行配置)

    最后,为了实现业务逻辑,我们需要在Service层定义接口和实现类,使用`@Service`注解,并通过`@Autowired`注解注入DAO层的实现类。这样,我们就构建了一个基于注解的SSH整合系统,它具有良好的模块化和松耦合特性。 ...

    集成ssh(注解方式)

    在注解方式下,我们可以使用@Service、@Repository和@Controller来标记服务、数据访问对象(DAO)和控制器类。例如,@Service("userService") 可以声明一个UserService接口的实现类,并自动注册到Spring容器中。同时...

    spring配置sessionFactory(spring3.2.3+hibernate4.2.2)

    4. 使用@Autowired注解注入SessionFactory,并在需要的地方进行数据库操作。 这个过程使得我们可以充分利用Spring的IoC(控制反转)和AOP(面向切面编程)特性,以及Hibernate的ORM能力,实现更高效、灵活的数据...

    springmvc+spring+hibernate整合(注解)

    2. 创建DAO接口和实现类,使用@Autowired注入SessionFactory,编写基本的CRUD操作。 3. 创建Service接口和实现类,定义业务逻辑,使用@Autowired注入DAO层。 4. 创建Spring MVC的Controller类,使用@RequestMapping...

    struts2+spring+hibernate s2sh半注解结合方式框架搭建开发

    在本项目中,"s2sh半注解结合方式框架搭建开发"指的是使用Struts2、Spring和Hibernate,并通过注解的方式来进行部分配置,以简化传统的XML配置文件,提高开发效率。 首先,让我们来详细了解一下这三个框架的核心...

    hibenate 对DAO的封装

    在服务层(Service Layer)中,我们可以依赖注入UserDAO并使用其提供的方法进行业务操作,而无需关心具体的实现细节。 至于提供的`HibernateUtil1.0`文件,它可能是包含了配置文件、实体类、DAO模板、以及可能的...

    ssh2连接多库注解方式

    其中,通过注解的方式连接多个数据库是SSH2中的一个重要特性,它可以显著简化配置,并提高代码的可维护性。 #### 一、SSH2多数据库注解模式介绍 SSH2中的多数据库连接主要依赖于Spring框架提供的强大配置能力。...

    spring几种Dao支持配置

    Spring的IoC容器可以通过依赖注入(DI)为DAO提供数据库连接池、事务管理器等依赖,提高了代码的可测试性和可维护性。 9. **单元测试支持:** Spring提供了`TestContext`框架,使得DAO可以在内存数据库(如HSQLDB...

    ssh 框架注解示例

    Struts2的动作类可以被Spring管理,通过`@Autowired`注入需要的服务或DAO。Hibernate的SessionFactory和TransactionManager通常由Spring配置并提供。在Struts2的配置中,可以使用Spring插件来实现Action的依赖注入。...

    HibernateDao.java

    通过Spring的`@Autowired`注解注入SessionFactory,再利用`@Transactional`注解开启事务管理,这样可以简化代码,提高可维护性。 4. **最佳实践** - **异常处理**:合理地捕获并处理Hibernate的异常,如`...

Global site tag (gtag.js) - Google Analytics