关于spring配置的理解
发布网友
发布时间:2022-04-10 07:18
我来回答
共4个回答
热心网友
时间:2022-04-10 08:47
<bean id="UserDAO" class="cn.com.sh..impl.UserDAOImpl">
<property name="sessionFactory" >
<ref bean="sessionFactory"/>
</property>
</bean>
这里的<property name="sessionFactory">
<ref bean="sessionFactory"/>
这样理解
这个property 就是属性的意思,意思是说id="UserDAO"的类class="cn.com.sh..impl.UserDAOImpl"中有一个属性sessionFactory.
你看下你的那个UserDAOImpl有没有sessionFactory这个属性.
如果这个类中没有,再找这个类的父类.
象UserDAOImpl这些类一般都是通过extends HibernateDaoSupport来进行操作的.也就是说UserDAOImpl的父类HibernateDaoSupport中肯定有sessionFactory这个属性了.
在配置文件中
<property name="sessionFactory">
<ref bean="sessionFactory"/>
意思是说这个sessionFactory参照了某个id="sessionFactory".
你再仔细看下你的配置文件
里面肯定有一个配置sessionFactory
象配置sessionFactory也许是下面这样的:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
............
</bean>
也就是说上面你那个
<bean id="UserDAO" class="cn.com.sh..impl.UserDAOImpl">
<property name="sessionFactory">这个sessionFactory是固定的
<ref bean="sessionFactory"/>这个sessionFactory是你先定义好的.
</property>
</bean>
有些属性的名字是固定,有些自定的id你可以自定名字的.你刚学这个,最好参照规范.
至于sessionFactory是什么,简单来讲就相当于JDBC里面的一个Connection
热心网友
时间:2022-04-10 10:05
这些写法都业内人士通用的做法,也可以,自己定义一些名字!看你自己的做法啦!
热心网友
时间:2022-04-10 11:40
<bean id="UserDAO" class="cn.com.sh..impl.UserDAOImpl">
<property name="sessionFactory"> //UserDAO中的变量名
<ref bean="sessionFactory"/> //Spring的bean的id
</property>
</bean>
这样配就是UserDAO属性里面有一个 sessionFactory 的变量
让spring把 名叫"sessionFactory"的bean注入进去
如果 UserDAO中没有 sessionFactory的set方法,肯定报错
在代理部分bean 的class是不能改变的(如果是自动代理的话,当然spring还有其他方式的代理)
property name也是不能改变的!
因为这次注入的是spring包里面的bean,名字已经定死了的
transactionManager
proxyInterfaces
target
等等~
你只需要复制spring的例子代码,修改value就可以了
热心网友
时间:2022-04-10 13:31
spring的HibernateDaoSupport 的部分源码:
public abstract class HibernateDaoSupport extends DaoSupport {
private HibernateTemplate hibernateTemplate;
/**
* Set the Hibernate SessionFactory to be used by this DAO.
* Will automatically create a HibernateTemplate for the given SessionFactory.
* @see #createHibernateTemplate
* @see #setHibernateTemplate
*/
public final void setSessionFactory(SessionFactory sessionFactory) {
if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
this.hibernateTemplate = createHibernateTemplate(sessionFactory);
}
}