Appfuse框架小结_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Appfuse框架小结

Appfuse框架小结

 2012/6/11 0:11:54  longmain  程序员俱乐部  我要评论(0)
  • 摘要:按照Appfuse2.1的文档http://java.net/projects/appfuse/downloads/download/appfuse-documentation-2.1.0.pdf如果你的DAO只是普通的CRUD(所需操作全部包含在GenericDAO中),则你只需要写好DAO对应的Entity即可。然后在hibernate.hbm.xml里注册一下你写的Entity(不管你是不是需要复杂的DAO,你都需要把你的Entity注册到这个文件里)
  • 标签:APP
按照Appfuse2.1的文档http://java.net/projects/appfuse/downloads/download/appfuse-documentation-2.1.0.pdf如果你的DAO只是普通的CRUD(所需操作全部包含在GenericDAO中),则你只需要写好DAO对应的Entity即可。然后在hibernate.hbm.xml里注册一下你写的Entity(不管你是不是需要复杂的DAO,你都需要把你的Entity注册到这个文件里)。
然后在src/main/webapp/WEB-INF/applicationContext.xml里注册一个DAO如下:
</beans>
    <bean id="personDao" class="org.appfuse.dao.hibernate.GenericDaoHibernate">
        <constructor-arg value="org.appfuse.tutorial.model.Person"/>
    </bean>
</beans>
在需要调用这个DAO的地方这样写即可:
private GenericDao<Person, Long> personDao;
@Autowired
public void setPersonDao(GenericDao<Person, Long> personDao) {
this.personDao = personDao;
}
针对这样DAO,你需要用它的Service(Appfuse里Service叫做Manager)的时候,在src/main/webapp/WEB-INF/applicationContext.xml里注册一个Manager,如下:
<beans>
    <bean id="personManager" class="org.appfuse.service.impl.GenericManagerImpl">
    <constructor-arg>
        <bean class="org.appfuse.dao.hibernate.GenericDaoHibernate" autowire="byType">
            <constructor-arg value="org.appfuse.tutorial.model.Person"/>
        </bean>
    </constructor-arg>
    </bean>
</beans>
在需要调用这个Service的地方,这样写:
private GenericManager<Person, Long> personManager;
public void setPersonManager(GenericManager<Person, Long> personManager) {
    this.personManager = personManager;
}
以上做法是非常简便的。但它所提供的操作仅限于GenericDao里的一些常用操作。
如果你的Service里要用多个Service或者其他的DAO,你就需要做一个复杂的Manager。这个复杂的Manager要继承GenericManager。GenericManager有泛型,需要指明Entity的class和key的class。例如上面的GenericDao<Person, Long>。
这时,如果你的DAO仍然要用一个普通的GenericDao,你就不需要上面那样复杂的Manager注册过程了。直接注册一个无参的Manager即可,例如:
<bean id="invoiceManager" class="org.appfuse.service.impl.InvoiceManagerImpl"/>
这个注册说明你做了InvoiceManager的Interface和这个Interface的实现类InvoiceManagerImpl。因为这个类继承了GenericManager,并在声明中给出了泛型,所以在注册的时候不需要参数了。
在这个Manager的实现类里,也无需像Appfuse2.1文档里说的那样做一个什么构造方法注入特殊DAO了。
在这个Manager里,如果你还需要其他的Service或者DAO,就像上面例子中说的那样,声明一个变量,并给这个变量写一个setter即可。
但是,如果你引用的是其他的Service(或你自己写的复杂的DAO),记住不要加@Autowired注解。如果引用的是GenericDao,则需要加注解。

=====June 7th, 2012=====
如果不是复杂Dao,不要在非本实体的Manager里通过Autowired引入。因为这时候不论用什么机制,都不能初始化这个Dao。
可以对要引用的其他Dao先做一个Manager。然后在本实体的Manager里引用新做的那个Manager。这时,Spring会在实例化Manager的时候实例化它里面的Dao。
如果非要直接引用其他实体的GenericDao,可以考虑用注入这个Dao的方式,例如:
    <bean id="invoiceManager" class="org.appfuse.service.impl.InvoiceManagerImpl">    
	    <constructor-arg>
	        <bean class="org.appfuse.dao.hibernate.GenericDaoHibernate" autowire="byType">             
	            <constructor-arg value="org.appfuse.model.Invoice"/>         
	        </bean>     
	    </constructor-arg>
	    <property name="invoiceApplDao">
	        <bean class="org.appfuse.dao.hibernate.GenericDaoHibernate" autowire="byType">             
	            <constructor-arg value="org.appfuse.model.InvoiceAppl"/>         
	        </bean>     
	    </property>
    </bean> 

private GenericDao<InvoiceAppl, Long> invoiceApplDao;
public void setInvoiceApplDao(GenericDao<InvoiceAppl, Long> invoiceApplDao){
		this.invoiceApplDao = invoiceApplDao;
	}
  • appfuse-documentation-2.1.0.pdf (2.9 MB)
  • 下载次数: 11
发表评论
用户名: 匿名