- 浏览: 218255 次
- 性别:
- 来自: 烟台
文章分类
最新评论
-
KateAndNomi2333:
kunchong21 写道tinguo002 写道List l ...
ArrayList深拷贝的一种实现方法 -
kunchong21:
tinguo002 写道List list1 = new Ar ...
ArrayList深拷贝的一种实现方法 -
suihr:
你设置的操作系统的时区正确吗?
Tomcat5.5时区设置 -
xiao_Yao:
我用windows8 tomcat5.5无法 使用 呀
Tomcat5.5时区设置 -
hftgoodgood:
hftgoodgood 写道 ...
通用权限管理系统设计篇(三)——概要设计说明书
http://sunqitang.iteye.com/blog/357837
spring2.5 注解技术
是否有了这些 IOC 注释,我们就可以完全摒除原来 XML 配置的方式呢?答案是否定的。有以下几点原因:
- 注释配置不一定在先天上优于 XML 配置。如果 Bean 的依赖关系是固定的,(如 Service 使用了哪几个 DAO 类),这种配置信息不会在部署时发生调整,那么注释配置优于 XML 配置;反之如果这种依赖关系会在部署时发生调整,XML 配置显然又优于注释配置,因为注释是对 Java 源代码的调整,您需要重新改写源代码并重新编译才可以实施调整。
- 如果 Bean 不是自己编写的类(如
JdbcTemplate
、SessionFactoryBean
等),注释配置将无法实施,此时 XML 配置是唯一可用的方式。 - 注释配置往往是类级别的,而 XML 配置则可以表现得更加灵活。比如相比于
@Transaction
事务注释,使用 aop/tx 命名空间的事务配置更加灵活和简单。
所以在实现应用中,我们往往需要同时使用注释配置和 XML 配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。
第一步:对spirng的配置文件进行调节:
对注释文件进行自动读取和加载
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:component-scan base-package="com.babasport"/>
- <context:property-placeholder location="classpath:jdbc.properties"/>
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName"
- value="${driverClassName}">
- </property>
- <property name="url" value="${url}"></property>
- <property name="username" value="${username}"></property>
- <property name="password" value="${password}"></property>
- </bean>
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.hbm2ddl.auto">create</prop>
- </props>
- </property>
- <property name="mappingResources">
- <list>
- <value>com/babasport/VO/project/ProjectType.hbm.xml</value>
- </list>
- </property>
- </bean></beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.babasport"/>
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="${driverClassName}">
</property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/babasport/VO/project/ProjectType.hbm.xml</value>
</list>
</property>
</bean></beans>
注意分析:
1
<context:property-placeholder location="classpath:jdbc.properties"/>
properties文件所在地。有了段代码以后,你的dataSource信息就可以存储在这个properties文件里面了。在spring中调用这些信息时使用${}方式。
2
<context:component-scan base-package="com.baobaotao"/>
后面的目录为要自动读取注释文件的目录范围(spring2.5 开始拥有的功能);这个里面包含了<context:annotation-config/>的信息。
3
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
这段代码加入了对context的支持
4
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
这里的class值也进行了修改
第二步: 在相应文件中加入注释
1 注入相关注释 (要支持<context:annotation-config/>)
@autowired和@Resouce
@Resouce先按name属性查找,如果找不到才用类型查找。即@Resouce要比@autowired好一些
@Resouce由J2EE提供,@Autowired由spring提供。所以这里还是提倡使用@Resouce
- public class ProjectService implements IProjectService {
- @Resource private ProjectTypeDAO projectTypeDAO;
- public void save(ProjectType projectType){
- this.projectTypeDAO.save();
- }
- }
public class ProjectService implements IProjectService { @Resource private ProjectTypeDAO projectTypeDAO; public void save(ProjectType projectType){ this.projectTypeDAO.save(); } }
例子中的projectTypeDAO就进行了注入,在配置文件中只需要写DAO,就可以不用写Service了
2 spring查询管理的相关注释(推荐) (要支持<context:component-scan base-package=".."/>,由了这个就默认上面也包含了,不用在写上面的那个支持了)
@Service 标注业务层对象的组件
@Controller 标注控制层对象的组件
@Repository 标注数据库访问层,即DAO层
@Component 标注“泛指"组件
把整个项目改造成注解方式的
第一步: 编写spring配置文件
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:component-scan base-package="com.babasport"/>
- <context:property-placeholder location="classpath:jdbc.properties"/>
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName"
- value="${driverClassName}">
- </property>
- <property name="url" value="${url}"></property>
- <property name="username" value="${username}"></property>
- <property name="password" value="${password}"></property>
- </bean>
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.hbm2ddl.auto">create</prop>
- </props>
- </property>
- <property name="mappingResources">
- <list>
- <value>com/babasport/VO/project/ProjectType.hbm.xml</value>
- </list>
- </property>
- </bean>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.babasport"/>
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="${driverClassName}">
</property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/babasport/VO/project/ProjectType.hbm.xml</value>
</list>
</property>
</bean>
</beans>
第二步:编写DAO文件,
BaseDAO文件继承hibernateDAOSupport。
由于SessionFacory是在hibernateDAOSupport里面的。不能进行更改,所以更set。。的名字。然后由类型匹配来进行更改
- package com.babasport.DAO.hibernate;
- import javax.annotation.Resource;
- import org.hibernate.SessionFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import org.springframework.stereotype.Repository;
- @Repository
- public class BaseDAO extends HibernateDaoSupport {
- @Autowired
- public void setSessionFactory0(SessionFactory sessionFactory){
- super.setSessionFactory(sessionFactory);
- }
- }
package com.babasport.DAO.hibernate; import javax.annotation.Resource; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; @Repository public class BaseDAO extends HibernateDaoSupport { @Autowired public void setSessionFactory0(SessionFactory sessionFactory){ super.setSessionFactory(sessionFactory); } }
普遍的DAO文件来继承这个BaseDAO文件:
- package com.babasport.Service.project;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Service;
- import com.babasport.DAO.IProjectTypeDAO;
- import com.babasport.DAO.hibernate.ProjectTypeDAO;
- import com.babasport.VO.project.ProjectType;
- @Service
- public class ProjectService implements IProjectService {
- @Resource(name="projectTypeDAO") private IProjectTypeDAO projectTypeDAO;
- public void save(ProjectType projectType){
- this.projectTypeDAO.save(projectType);
- }
- }
package com.babasport.Service.project; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.babasport.DAO.IProjectTypeDAO; import com.babasport.DAO.hibernate.ProjectTypeDAO; import com.babasport.VO.project.ProjectType; @Service public class ProjectService implements IProjectService { @Resource(name="projectTypeDAO") private IProjectTypeDAO projectTypeDAO; public void save(ProjectType projectType){ this.projectTypeDAO.save(projectType); } }
第三步: 编写Service文件
- package com.babasport.Service.project;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Service;
- import com.babasport.DAO.IProjectTypeDAO;
- import com.babasport.DAO.hibernate.ProjectTypeDAO;
- import com.babasport.VO.project.ProjectType;
- @Service
- public class ProjectService implements IProjectService {
- @Resource(name="projectTypeDAO") private IProjectTypeDAO projectTypeDAO;
- public void save(ProjectType projectType){
- this.projectTypeDAO.save(projectType);
- }
- }
package com.babasport.Service.project; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.babasport.DAO.IProjectTypeDAO; import com.babasport.DAO.hibernate.ProjectTypeDAO; import com.babasport.VO.project.ProjectType; @Service public class ProjectService implements IProjectService { @Resource(name="projectTypeDAO") private IProjectTypeDAO projectTypeDAO; public void save(ProjectType projectType){ this.projectTypeDAO.save(projectType); } }
分析:
@Service和@Response为自动往配置文件中加入bean
@Resouce和@Autowried为把ref信息导入
相关推荐
Spring2.5 注解介绍(3.0通用) Spring2.5 注解介绍(3.0通用) Spring2.5 注解介绍(3.0通用)
spring mvc+ibatis+spring2.5注解
Spring 2.5 基于注解驱动的Spring MVC 开发参考文档
配置整合DWR3.0和Spring2.5使用annotation注解
Spring2.5注解(标注)学习笔记: 一句话:对开发人员来说:最常用的Spring2.5最常用的注解就4个: @Resource @Qualifier @Service @Repository
spring2.5注解介绍[参考].pdf
struts2.0 spring2.5 hibernate3.2 注解最新框架
使用Spring2.5的Autowired实现注释型的IOC , 使用Spring2.5的新特性——Autowired可以实现快速的自动注入,而无需在xml文档里面添加bean的声明,大大减少了xml文档的维护
CRM完整版 spring2.5注解+hibernate3.0 适合于中级程序员,对您绝对有帮助
Spring2.5_注解介绍(3.0通用),一齐分享!
spring依赖注入的最新技术实现 简单易懂,很实用的哟
java Spring2.5详细注解
使用 Spring 2.5 基于注解驱动的 Spring.pdf
spring2.5基于注解的例子程序,包含相关jar包
使用 Spring 2.5 基于注解驱动的 Spring MVC
超级详细的SSH2项目实例详解,...两种注解实现方式。不同的生成数据脚本实现。 在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过二个实例,详细的为大家讲解如何实现全注解式的开发。
使用Spring 2.5 基于注解驱动的 Spring MVC详解
Spring2.5继续坚持了简化企业级应用开发,同时给复杂问题提供强大的、非侵入性解决方案的发展趋向,特别是为那些使用Java 5或更新版本java的开发人员提供了进一步简化而强大的新特性。这些新特性包括:注解驱动的...
最新Struts2.1+Spring2.5+Hibernate3.3整合开发,很好用,配合注解开发
Spring 2.5 基于注解驱动的 Spring MVC