Spring基于Annotation为dao装配sessionFactory的问题

先来看applicationContext.xml中的配置



    
          
    
          
	
		
		
		
		
	
	
	
		
		
		
			
				${dataSource.dialect}
				${dataSource.hbm2ddl.auto}
				update
			
		
		
			
				com.dhy.format.bbs.entity
			
		
	
	
	
	
	
		
	

	
		
	

	
		
			
			
			
			
			
		
	
	


下面是Dao实现类。

@Repository("userDao")

public class UserDaoImpl extends HibernateDaoSupport implements IUserDao


由于继承了HibernateDaoSupport类。 需要为其注入sessionFactory。


由于我们要用注解为dao注入sessionFactory。


这里有两种解决方案。


第一种是applicationContext.xml中加入 default-autowire="byName" 默认按照名字注入


第二种是是在UserDaoImpl 实现类中加入以下代码:


private SessionFactory mySessionFactory;

	@Autowired
	@Qualifier("sessionFactory")
	public void setMySessionFactory(SessionFactory mySessionFactory) {
		this.mySessionFactory = mySessionFactory;
	}
	
	@PostConstruct
	public void setSuperSessionFactory() {
		super.setSessionFactory(mySessionFactory);
	}




说明一下这里代码的意思。 

UserDaoImpl有个mySessionFactory属性。


在启动项目的时候spring容器会在我们配置的applicationContext.xml中实例化sessionFactory实例。


通过Autowired我们为自己的mySessionFactory注入了sessionFactory实例。


@PostConstruct的意思是在Bean初始化之后被Spring容器执行。(Bean初始化包括实例化Bean和装配Bean的属性。)


因此在调用super.setSessionFactory(mySessionFactory)的时候Bean中的mySessionFactory已经被装配。


所以最终为dao注入了sessionFactory!






你可能感兴趣的:(Spring学习)