Spring Annotation Essays

 

注解关键字

@InitBinder用于表单自定义属性绑定。这里我们要求输入一个日期格式的生日。

    case :我们的项目使用定义父类Controller 并定义方法

 

  1.  @InitBinder
  2.     public void initBinder(WebDataBinder binder) {  
  3.         DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
  4.         //binder.registerCustomEditor(Date.class, "birthday",new CustomDateEditor(format, true));  第二个参数可有可无, 表明不饿按对象的属性格式化
  5.  
  6.         binder.registerCustomEditor(Date.classnew CustomDateEditor(format, true));  
  7.     }  

 

JSR-250标准注解

@Resource来代替Spring专有的@Autowired注解。 

Spring支持三个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。

@Resource(name=“beanId”或者type=“Class”)

@Autowired() === @Resource(type="")

@Autowired()配合 @Qualifier("beanId") === @Resource(name="beanId")

 

@PostConstruct 于方法上

此方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))

 

 @Value在注解的方式(Spring3.0)中,容器加载了Properties文件

 

  1. <util:properties id="jdbc" location="/WEB-INF/database.properties"/>  

 

 

  1. @Value("${jdbc.url}")   
  2. private String url;

 

@ImportResouce 如果只有这么一个类使用该配置文

 

  1. @ImportResource("/WEB-INF/database.properties")  
  2. public class AccountDaoImpl extends AccountDao { 

 

@RequestParam  

@RequestParam("username")

@PathVariable

@PathVariable()参数可有可无,默认按照名称匹配,参表示对应地址栏参数名称

 

@Repository

明确这个类是用于持久层的实现类,注意这样的注解不能用于接口,仅适用于实现类!

 

@RequestMapping

@RequestMapping("/url"),亦可以是String[]:@RequestMapping({"/url1","/url2"})

 

 

Spring-Test

 

  1. import org.junit.runner.RunWith;  
  2. import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;  
  3. import org.springframework.test.context.ContextConfiguration;  
  4. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  5. import org.springframework.test.context.transaction.TransactionConfiguration;  
  6. import org.springframework.transaction.annotation.Transactional;  
  7.   
  8. @ContextConfiguration(locations = "classpath:applicationContext.xml")  
  9. @RunWith(SpringJUnit4ClassRunner.class)  
  10. @Transactional  
  11. @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)  
  12. public abstract class AbstractTestCase extends  
  13.         AbstractTransactionalDataSourceSpringContextTests {  
  14.   
  15. }  

 

 

 

主要增加了spring-test-2.5.6.jar和junit-4.4.jar两个用于测试的包! 
这里尤其要说明一下,由于我们使用注解方式自然要用到JUnit-4.X系列,而Sring-Test对于JUnit有个累人的要求,JUnit的版本必须是4.4,不支持高版本(如4.5、4.7等)。否则,会产生java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException异常。

@ContextConfiguration(locations = "classpath:applicationContext.xml")导入配置文件。这时候,我们可以看出之前使用applicationContext.xml文件作为系统总控文件的好处! 当然,Spring-Test的这个配置只认classpath,很无奈,我必须拷贝这些文件到根目录!
@RunWith(SpringJUnit4ClassRunner.class)SpringJUnit支持,由此引入Spring-Test框架支持! 
@Transactional这个非常关键,如果不加入这个注解配置,事务控制就会完全失效! 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库!

AbstractTransactionalDataSourceSpringContextTests要想构建这一系列的无污染纯绿色事务测试框架就必须找到这个基类!

例:

 

  1.   
  2. import java.util.Date;  
  3.   
  4. import org.junit.Test;  
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.zlex.spring.dao.AccountDao;  
  7. import org.zlex.spring.domain.Account;  
  8.   
  9. public class AccountDaoTest extends AbstractTestCase {  
  10.   
  11.     @Autowired
  12.     private AccountDao accountDao;  
  13.   
  14.     @Test
  15.     public void test() {  
  16.         Account ac = new Account();  
  17.         ac.setBirthday(new Date());  
  18.         ac.setUsername("SPRING");  
  19.         ac.setPassword("SNOWOLF");  
  20.         ac.setEmail("[email protected]");  
  21.   
  22.         // 创建用户  
  23.         accountDao.create(ac);  
  24.     }  
  25.   
  26. }  

 

 

@RunWith(Suite.class)集合测试 

@SuiteClasses( { AccountDaoTest.class })集合,包括AccountDaoTest类,多个测试类可使用逗号分隔
  1. import org.junit.runner.RunWith;  
  2. import org.junit.runners.Suite;  
  3. import org.junit.runners.Suite.SuiteClasses;  
  4.   
  5. @RunWith(Suite.class)  
  6. @SuiteClasses( { AccountDaoTest.class, AccountDaoTest.class })  
  7. public class DaoAllTests {  
  8.   
  9. }  
附赠
JQuery之ajax
  1. $.ajaxSetup({  
  2.         contentType : 'application/json'  
  3.     })

解决org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 

$.post()支持json格式

你可能感兴趣的:(Spring Annotation Essays)