大部分时候我们都是通过xml配置方式向DAO中注入sessionfactory来实例化bean,有时候要DAO的实例化是通过注解的方式来实现。
对dao注解的话,最大的障碍是如何同时通过注解注入sessionfactory。
dao继承自HibernateDaoSupport ,sessionfactory来自于HibernateDaoSupport 中,我们无法修改HibernateDaoSupprot中的sessionfactory属性进行注解,我们也无法对final类型的setSessionfactory方法进行重写,故而要想把sessionfatory注入就得另外想办法了。
无论何种方法,本质上都是把sessionfactory赋给HibernateDaoSupprot中的sessionfactory,只有这样我们才能任意的使用HibernateDaoSupport中的任何方法。
第一个方法:通过@Resouce--按名字注入(@Autowired--按类型注入)注入,并执行方法体内容
- 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,直接使用其方法。
相关推荐
3. **配置DAO**:使用Spring的`@Repository`注解标记DAO接口,通常会配合`@Autowired`注入SessionFactory或EntityManager。 4. **服务层**:使用`@Service`注解标记服务类,这里会包含业务逻辑,同样可以使用`@...
在Spring框架中,整合Hibernate是常见的操作,Spring通过其强大的依赖注入(DI)特性,能够帮助我们更好地管理和控制SessionFactory以及与Hibernate相关的操作。本示例将深入探讨如何使用Spring将SessionFactory注入...
在SSH2整合中,Spring会管理Hibernate的SessionFactory,并通过`@PersistenceContext`注解注入SessionFactory,然后通过SessionFactory获取Session,进而执行数据库操作。这种方式使得数据访问层的代码更加简洁,...
在IT行业中,Spring、SpringMVC和Hibernate是Java企业级应用开发中的三大核心框架,它们分别专注于依赖注入、Web MVC层以及持久层操作。在这个全注解案例中,我们将探讨如何利用这三大框架进行高效、简洁的开发,...
在非注解方式下,你需要在XML配置文件中声明并配置Bean,通过`<bean>`标签指定类名、初始化方法等。例如,你可以定义一个服务接口和其实现类,然后在Spring容器中声明这两个Bean,并通过`<property>`标签设置依赖...
2. 在Spring中启用注解配置,配置数据源、SessionFactory,并使用`@ComponentScan`扫描包含Service、DAO的包。 3. 集成Hibernate,配置SessionFactory,并使用`@EntityScan`扫描实体类包。 4. 使用Spring的`@...
在S2SH整合中,比如在Spring中可以使用`@Component`、`@Service`、`@Repository`、`@Controller`等注解声明Bean,而Hibernate可以通过`@Entity`、`@Table`、`@Id`等注解定义实体类。 5. **JSON**:JavaScript ...
在这个实现类中,可以利用`@Autowired`自动注入SessionFactory。 4. **Service层**:创建Service接口和实现类,通常会使用`@Service`注解。业务逻辑在此处处理,通过DAO接口与数据库交互。 5. **Controller层**:...
在本示例中,我们将探讨如何通过Maven来构建一个基于注解方式的SSH框架。 首先,让我们深入了解SSH框架的每个组件: 1. **Struts2**:作为MVC(模型-视图-控制器)框架,Struts2负责处理HTTP请求并将其路由到相应...
4. **实现DAO接口**:在实现类上使用`@Autowired`注解注入SessionFactory,并使用Hibernate的注解API进行数据库操作,如`@Transactional`,`Session`,`Query`等。 5. **创建Service接口和实现**:Service层是业务...
最后,为了实现业务逻辑,我们需要在Service层定义接口和实现类,使用`@Service`注解,并通过`@Autowired`注解注入DAO层的实现类。这样,我们就构建了一个基于注解的SSH整合系统,它具有良好的模块化和松耦合特性。 ...
在注解方式下,我们可以使用@Service、@Repository和@Controller来标记服务、数据访问对象(DAO)和控制器类。例如,@Service("userService") 可以声明一个UserService接口的实现类,并自动注册到Spring容器中。同时...
4. 使用@Autowired注解注入SessionFactory,并在需要的地方进行数据库操作。 这个过程使得我们可以充分利用Spring的IoC(控制反转)和AOP(面向切面编程)特性,以及Hibernate的ORM能力,实现更高效、灵活的数据...
2. 创建DAO接口和实现类,使用@Autowired注入SessionFactory,编写基本的CRUD操作。 3. 创建Service接口和实现类,定义业务逻辑,使用@Autowired注入DAO层。 4. 创建Spring MVC的Controller类,使用@RequestMapping...
在本项目中,"s2sh半注解结合方式框架搭建开发"指的是使用Struts2、Spring和Hibernate,并通过注解的方式来进行部分配置,以简化传统的XML配置文件,提高开发效率。 首先,让我们来详细了解一下这三个框架的核心...
在服务层(Service Layer)中,我们可以依赖注入UserDAO并使用其提供的方法进行业务操作,而无需关心具体的实现细节。 至于提供的`HibernateUtil1.0`文件,它可能是包含了配置文件、实体类、DAO模板、以及可能的...
其中,通过注解的方式连接多个数据库是SSH2中的一个重要特性,它可以显著简化配置,并提高代码的可维护性。 #### 一、SSH2多数据库注解模式介绍 SSH2中的多数据库连接主要依赖于Spring框架提供的强大配置能力。...
Spring的IoC容器可以通过依赖注入(DI)为DAO提供数据库连接池、事务管理器等依赖,提高了代码的可测试性和可维护性。 9. **单元测试支持:** Spring提供了`TestContext`框架,使得DAO可以在内存数据库(如HSQLDB...
Struts2的动作类可以被Spring管理,通过`@Autowired`注入需要的服务或DAO。Hibernate的SessionFactory和TransactionManager通常由Spring配置并提供。在Struts2的配置中,可以使用Spring插件来实现Action的依赖注入。...
通过Spring的`@Autowired`注解注入SessionFactory,再利用`@Transactional`注解开启事务管理,这样可以简化代码,提高可维护性。 4. **最佳实践** - **异常处理**:合理地捕获并处理Hibernate的异常,如`...