`

spring2.5 注解技术

阅读更多

http://sunqitang.iteye.com/blog/357837

spring2.5 注解技术

注释配置和 XML 配置的适用场合

是否有了这些 IOC 注释,我们就可以完全摒除原来 XML 配置的方式呢?答案是否定的。有以下几点原因:

  • 注释配置不一定在先天上优于 XML 配置。如果 Bean 的依赖关系是固定的,(如 Service 使用了哪几个 DAO 类),这种配置信息不会在部署时发生调整,那么注释配置优于 XML 配置;反之如果这种依赖关系会在部署时发生调整,XML 配置显然又优于注释配置,因为注释是对 Java 源代码的调整,您需要重新改写源代码并重新编译才可以实施调整。
  • 如果 Bean 不是自己编写的类(如 JdbcTemplateSessionFactoryBean 等),注释配置将无法实施,此时 XML 配置是唯一可用的方式。
  • 注释配置往往是类级别的,而 XML 配置则可以表现得更加灵活。比如相比于 @Transaction 事务注释,使用 aop/tx 命名空间的事务配置更加灵活和简单。

所以在实现应用中,我们往往需要同时使用注释配置和 XML 配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。

 

第一步:对spirng的配置文件进行调节:

 

  对注释文件进行自动读取和加载

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.                     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  8.                     http://www.springframework.org/schema/context    
  9.                     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  10.        
  11.     <context:component-scan base-package="com.babasport"/>  
  12.     <context:property-placeholder location="classpath:jdbc.properties"/>  
  13.     <bean id="dataSource"  
  14.         class="org.apache.commons.dbcp.BasicDataSource">  
  15.         <property name="driverClassName"  
  16.             value="${driverClassName}">  
  17.         </property>  
  18.         <property name="url" value="${url}"></property>  
  19.         <property name="username" value="${username}"></property>  
  20.         <property name="password" value="${password}"></property>  
  21.     </bean>  
  22.     <bean id="sessionFactory"  
  23.         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  24.         <property name="dataSource">  
  25.             <ref bean="dataSource" />  
  26.         </property>  
  27.         <property name="hibernateProperties">  
  28.             <props>  
  29.                 <prop key="hibernate.dialect">  
  30.                     org.hibernate.dialect.MySQLDialect   
  31.                 </prop>  
  32.                 <prop key="hibernate.show_sql">true</prop>  
  33.                 <prop key="hibernate.hbm2ddl.auto">create</prop>  
  34.             </props>  
  35.         </property>  
  36.         <property name="mappingResources">  
  37.             <list>  
  38.                 <value>com/babasport/VO/project/ProjectType.hbm.xml</value>  
  39.             </list>  
  40.         </property>  
  41.     </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

Xml代码 复制代码
  1. <context:property-placeholder location="classpath:jdbc.properties"/>  
<context:property-placeholder location="classpath:jdbc.properties"/>

     properties文件所在地。有了段代码以后,你的dataSource信息就可以存储在这个properties文件里面了。在spring中调用这些信息时使用${}方式。

  2

Xml代码 复制代码
  1. <context:component-scan base-package="com.baobaotao"/>  
<context:component-scan base-package="com.baobaotao"/>

    后面的目录为要自动读取注释文件的目录范围(spring2.5 开始拥有的功能);这个里面包含了<context:annotation-config/>的信息。

  3

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.                     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  8.                     http://www.springframework.org/schema/context    
  9.                     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

Xml代码 复制代码
  1. <bean id="sessionFactory"  
  2.         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

 

Java代码 复制代码
  1. public class ProjectService implements IProjectService {   
  2.     @Resource private ProjectTypeDAO projectTypeDAO;   
  3.        
  4.     public void save(ProjectType projectType){   
  5.         this.projectTypeDAO.save();   
  6.     }   
  7. }  
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代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.                     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  8.                     http://www.springframework.org/schema/context    
  9.                     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  10.     <context:component-scan base-package="com.babasport"/>  
  11.     <context:property-placeholder location="classpath:jdbc.properties"/>  
  12.     <bean id="dataSource"  
  13.         class="org.apache.commons.dbcp.BasicDataSource">  
  14.         <property name="driverClassName"  
  15.             value="${driverClassName}">  
  16.         </property>  
  17.         <property name="url" value="${url}"></property>  
  18.         <property name="username" value="${username}"></property>  
  19.         <property name="password" value="${password}"></property>  
  20.     </bean>  
  21.     <bean id="sessionFactory"  
  22.         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  23.         <property name="dataSource">  
  24.             <ref bean="dataSource" />  
  25.         </property>  
  26.         <property name="hibernateProperties">  
  27.             <props>  
  28.                 <prop key="hibernate.dialect">  
  29.                     org.hibernate.dialect.MySQLDialect   
  30.                 </prop>  
  31.                 <prop key="hibernate.show_sql">true</prop>  
  32.                 <prop key="hibernate.hbm2ddl.auto">create</prop>  
  33.             </props>  
  34.         </property>  
  35.         <property name="mappingResources">  
  36.             <list>  
  37.                 <value>com/babasport/VO/project/ProjectType.hbm.xml</value>  
  38.             </list>  
  39.         </property>  
  40.     </bean>  
  41.        
  42.     </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。。的名字。然后由类型匹配来进行更改

 

Java代码 复制代码
  1. package com.babasport.DAO.hibernate;   
  2.   
  3. import javax.annotation.Resource;   
  4.   
  5. import org.hibernate.SessionFactory;   
  6. import org.springframework.beans.factory.annotation.Autowired;   
  7. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  8. import org.springframework.stereotype.Repository;   
  9. @Repository  
  10. public class BaseDAO extends HibernateDaoSupport {   
  11.     @Autowired  
  12.     public void setSessionFactory0(SessionFactory sessionFactory){   
  13.         super.setSessionFactory(sessionFactory);   
  14.     }   
  15.        
  16. }  
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文件:

Java代码 复制代码
  1. package com.babasport.Service.project;   
  2.   
  3. import javax.annotation.Resource;   
  4.   
  5. import org.springframework.stereotype.Service;   
  6.   
  7. import com.babasport.DAO.IProjectTypeDAO;   
  8. import com.babasport.DAO.hibernate.ProjectTypeDAO;   
  9. import com.babasport.VO.project.ProjectType;   
  10.   
  11. @Service  
  12. public class ProjectService implements IProjectService {   
  13.     @Resource(name="projectTypeDAO"private IProjectTypeDAO projectTypeDAO;   
  14.        
  15.     public void save(ProjectType projectType){   
  16.         this.projectTypeDAO.save(projectType);   
  17.     }   
  18. }  
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文件

 

Java代码 复制代码
  1. package com.babasport.Service.project;   
  2.   
  3. import javax.annotation.Resource;   
  4.   
  5. import org.springframework.stereotype.Service;   
  6.   
  7. import com.babasport.DAO.IProjectTypeDAO;   
  8. import com.babasport.DAO.hibernate.ProjectTypeDAO;   
  9. import com.babasport.VO.project.ProjectType;   
  10.   
  11. @Service  
  12. public class ProjectService implements IProjectService {   
  13.     @Resource(name="projectTypeDAO"private IProjectTypeDAO projectTypeDAO;   
  14.        
  15.     public void save(ProjectType projectType){   
  16.         this.projectTypeDAO.save(projectType);   
  17.     }   
  18. }  
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信息导入

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics