[Spring] IOC

Spring Annotation使用例子。

与XML配置的例子一样:http://www.cnblogs.com/HD/p/3962541.html


Project结构:


配置文件:springContext.xml

<?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.my" />
    
</beans>

DAO:

package com.my.dao;

import org.springframework.stereotype.Repository;

@Repository
public abstract class AccountDaoFactory {
    /*
     * Fin account by id
     */
    public abstract Integer findAccount(Integer accountID);
}
package com.my.dao.mysql;

import org.springframework.stereotype.Repository;

@Repository(value="accountDao")
public class AccountDao extends com.my.dao.AccountDaoFactory {
    /*
     * Find account by account id
     */
    @Override
    public Integer findAccount(Integer accountID) {
        return accountID;
    }
}

Service:

package com.my.service;

import javax.annotation.Resource;

import com.my.dao.AccountDaoFactory;

public abstract class AccountServiceFactory {
    @Resource(name="accountDao")
    protected AccountDaoFactory accountDao;
    
    public abstract Integer findAccount(Integer accountID);

    public AccountDaoFactory getAccountDAO() {
        return accountDao;
    }

    public void setAccountDAO(AccountDaoFactory accountDAO) {
        this.accountDao = accountDAO;
    }
}
package com.my.service.mysql;

import org.springframework.stereotype.Service;

import com.my.service.AccountServiceFactory;

@Service(value="accountService")
public class AccountService extends AccountServiceFactory {

    @Override
    public Integer findAccount(Integer accountID) {
        return accountDao.findAccount(accountID);
    }
    
}

Controller:

package com.my.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;

import com.my.service.AccountServiceFactory;

@Controller
public class SpringController {
    @Resource(name="accountService")
    private AccountServiceFactory accountService;
    
    public AccountServiceFactory getAccount() {
        return accountService;
    }

    public void setAccount(AccountServiceFactory account) {
        this.accountService = account;
    }
    
    public Integer findAccount(Integer accountID){
        return accountService.findAccount(accountID);
    }
    
}

JUnit测试:

package com.my.controller;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringControllerTest {
    private SpringController springController;
    private ApplicationContext context;

    @Before
    public void setUp() throws Exception {
        context = new ClassPathXmlApplicationContext("springContext.xml");
        // Use class load
        springController = (SpringController)context.getBean(SpringController.class);
    }

    @Test
    public void testFindAccount() {
        Integer id = 100;
        Integer result = springController.findAccount(id);
        assertEquals(id, result);
        System.out.println(result);
    }

}

输出结果:

原文地址:https://www.cnblogs.com/HD/p/3962879.html