spring框架Annotation实现零配置的方法



spring框架Annotation实现零配置的方法.有关spring的注解,今天了解了下,现在一方面做下学习总结,另一方面给学习的筒子做个借鉴。

 

spring提供相关的几个Annotation来标注bean先列出来

@Component:标注一个普通的spring bean

@Controller:标注一个控制器组件类如action

@Service:标注一个逻辑控制类如Service层

@Repository:标注一个持久层Dao组件类

 

再列几个

@Scope:相信大家对这个不陌生吧,表示bean的作用域,使用方式:Scope(“prototype”)

@Resource:配合依赖,使用方式:Resource(name=”XXXX”)等同于xml中的配置<property …… ref=”XXXX” />

@Autowired:自动装配,默认按照type装配,如果需要按照name装配就需要和下面的相结合了

@Qualifier

针对自动装配下面展示两种写法分别表示属性修饰和set方式修饰:

@Autowried

@Qualifier(“XXXX”)

private XXXX xxxx;

—————————————————–

@Autowried

public void setXXX(@Qualifier(“xxxx”) XXX xxx){}

 

基本常用的注解也就上面的了,现在贴上代码:

要想让注解生效,首先要在配置文件中指明扫描那些包下的Bean类,

 


包结构:

cn.life.routine

-action

-dao

-service

 

引入ContextSchema,spring配置

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <beans xmlns=”http://www.springframework.org/schema/beans”
  3.     xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
  4.     xmlns:context=”http://www.springframework.org/schema/context”
  5.     xsi:schemaLocation=”
  6.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7.        http://www.springframework.org/schema/context <a href=”http://www.springframework.org/schema/context/spring-context-3.0.xsd”>http://www.springframework.org/schema/context/spring-context-3.0.xsd</a>”
  8.     >
  9.     <!– action暂未用注解 –>
  10.     <bean id=”NoticeAction” class=”cn.life.routine.action.NoticeAction” scope=”prototype” ></bean>
  11.     <!– 注解测试,routine –>
  12.     <context:component-scan base-package=”cn.life.routine”></context:component-scan>
  13. </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-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
	>

	<!-- action暂未用注解 -->
	<bean id="NoticeAction" scope="prototype" ></bean>

	<!-- 注解测试,routine -->
	<context:component-scan base-package="cn.life.routine"></context:component-scan>
</beans>

现在依次贴出service,dao

service接口

  1. /**
  2. * 注解
  3. * @author Francis.Hu
  4. * @createDate Oct 21, 2012
  5. */
  6. public interface TestService {
  7.     /**
  8.      * 注解测试
  9.      * @return
  10.      */
  11.     public String getTestAnnotation();
  12. }
/**
 * 注解
 * @author Francis.Hu
 * @createDate Oct 21, 2012
 */
public interface TestService {

	/**
	 * 注解测试
	 * @return
	 */
	public String getTestAnnotation();
}

service实现类

 

  1. package cn.life.routine.service;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.stereotype.Service;
  5. import cn.life.routine.dao.TestDao;
  6. /**
  7. * 注解测试
  8. * @author Francis.Hu
  9. * @createDate Oct 21, 2012
  10. */
  11. @Service(“testService”)
  12. public class TestServiceImp implements TestService{
  13.     /**
  14.      * 自动装配
  15.      */
  16.     @Autowired
  17.     @Qualifier(“testDao”)
  18.     //@Resource(name=”testDao”), 等价于<property ………… ref=”testDao” />
  19.     private TestDao testDao;
  20.     public String getTestAnnotation() {
  21.         return testDao.getTestDaoAnnotation();
  22.     }
  23.     public TestDao getTestDao() {
  24.         return testDao;
  25.     }
  26.     public void setTestDao(TestDao testDao) {
  27.         this.testDao = testDao;
  28.     }
  29. }
package cn.life.routine.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import cn.life.routine.dao.TestDao;

/**
 * 注解测试
 * @author Francis.Hu
 * @createDate Oct 21, 2012
 */
@Service("testService")
public class TestServiceImp implements TestService{

	/**
	 * 自动装配
	 */
	@Autowired
	@Qualifier("testDao")
	//@Resource(name="testDao"), 等价于<property ………… ref="testDao" />
	private TestDao testDao;

	public String getTestAnnotation() {
		return testDao.getTestDaoAnnotation();
	}

	public TestDao getTestDao() {
		return testDao;
	}

	public void setTestDao(TestDao testDao) {
		this.testDao = testDao;
	}

}

dao层接口

  1. /**
  2. * 测试注解
  3. * @author Francis.Hu
  4. * @createDate Oct 21, 2012
  5. */
  6. public interface TestDao {
  7.     /**
  8.      * 得到dao层注解
  9.      * @return
  10.      */
  11.     public String getTestDaoAnnotation();
  12. }
/**
 * 测试注解
 * @author Francis.Hu
 * @createDate Oct 21, 2012
 */
public interface TestDao {

	/**
	 * 得到dao层注解
	 * @return
	 */
	public String getTestDaoAnnotation();
}

dao层实现类

  1. /**
  2. * 测试注解
  3. * @author Francis.Hu
  4. * @createDate Oct 21, 2012
  5. */
  6. @Repository(“testDao”)
  7. public class TestDaoImpl implements TestDao {
  8.     public String getTestDaoAnnotation() {
  9.         return “This is testDao Annotation”;
  10.     }
  11. }
/**
 * 测试注解
 * @author Francis.Hu
 * @createDate Oct 21, 2012
 */
@Repository("testDao")
public class TestDaoImpl implements TestDao {

	public String getTestDaoAnnotation() {
		return "This is testDao Annotation";
	}

}

下面是action中的调用

  1. /**
  2. * 测试注解
  3. * @return
  4. */
  5. @Resource(name=”testService”)
  6. private TestService testService;
  7. public String testAnnotation(){
  8.     String result = testService.getTestAnnotation();
  9.     System.out.println(result);
  10.     return SUCCESS;
  11. }
  12. public TestService getTestService() {
  13.     return testService;
  14. }
  15. public void setTestService(TestService testService) {
  16.     this.testService = testService;
  17. }
  18. /*********************测试结束******************************/
	/**
	 * 测试注解
	 * @return
	 */
	@Resource(name="testService")
	private TestService testService;
	public String testAnnotation(){
		String result = testService.getTestAnnotation();
		System.out.println(result);
		return SUCCESS;
	}
	public TestService getTestService() {
		return testService;
	}

	public void setTestService(TestService testService) {
		this.testService = testService;
	}
	/*********************测试结束******************************/

 

开发中没有绝对的xml配置或者绝对的零配置 ,只有合理的相互结合才能保证项目的可读性,高效性,个人语言组织能力有限,如果有什么问题或者建议请发邮件至franci.hu.0115@gmail.com

http://blog.csdn.net/pk490525/article/details/8096326