IOC入门1

1.配置文件

<?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.0.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
                
    <!--bean的名字是u, id是名字为u的对象 -->            
    <bean  id="u" class="com.test.spring.dao.UserDAOImpl" />
    
    <!-- property中的userDAO参考的bean(u) -->
    <bean id="userService" class="com.test.spring.service.UserServiceImpl">
        <property  name="userDAO" ref="u" />
    </bean>
</beans>

2.bean实现

package com.test.spring.model;

public class User {

    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
}

 

3.dao层接口实现

package com.test.spring.dao;

import com.test.spring.model.User;


public interface UserDAO {

    public void save(User u);
    
    public void delete();
}

4.dao层实现类实现

package com.test.spring.dao;

import com.test.spring.model.User;

/**
 * 与数据库打交道,管理数据库,将数据屏蔽
 * @author Administrator
 *
 */
public class UserDAOImpl implements UserDAO
{

    @Override
    public void save(User u) {
        System.out.println("saved!!!");
    }
    
    @Override
    public void delete() {
        System.out.println("delete!!!");
    }

}

5.service层接口编写

package com.test.spring.service;

import com.test.spring.dao.UserDAO;
import com.test.spring.model.User;

/**
 * 管理层,与Bean层打交道,和与数据库管理层DAO层打交道 
 * @author Administrator
 *
 */
public interface UserService {

    public void add(User u);
}

6.service实现类实现

package com.test.spring.service;

import com.test.spring.dao.UserDAO;
import com.test.spring.dao.UserDAOImpl;
import com.test.spring.model.User;

/**
 * 负责是的业务逻辑,而DAO层只负责数据库层
 * @author Administrator
 *
 */
public class UserServiceImpl implements UserService 
{

    //可以调用UserDAO将User存入到数据库中,所以要new一个UserDAOImpl的引用
    private UserDAO userDAO = new UserDAOImpl();
    
    public UserDAO getUserDAO() {
        return userDAO;
    }

    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    public void add(User u) {
        this.userDAO.save(u);
    }
}

7json测试类编写

package test.test;

import java.lang.reflect.Proxy;

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

import com.test.spring.aop.LogInterceptor;
import com.test.spring.dao.UserDAO;
import com.test.spring.dao.UserDAOImpl;
import com.test.spring.model.User;
import com.test.spring.service.UserServiceImpl;

public class UserServiceImplTest {

    /**
     * @throws Exception 
     * @Test 叫注解
     */
    
    public void testAdd() throws Exception {

        //ApplicationContext实现了生命周期
        ApplicationContext factory = new ClassPathXmlApplicationContext("beans.xml");
        
        UserServiceImpl service = (UserServiceImpl)factory.getBean("userService");
        
        /**
         * 这里体现了IOC(控制反转)的思想,控制的是它的接口(抽象),
         * 而不是实现,容器里控制这它的实现
         */
        UserDAO userDAO = (UserDAO)factory.getBean("u");
        service.setUserDAO(userDAO);
        User u = new User();
        u.setPassword("zhangsan");
        u.setUsername("zhangsan");
        
        //这里体现了DI(依赖注入)的思想,将u中的容器中u的class注入到service这个bean中
        service.add(u);
    }
    @Test
    public void testProxy()
    {
        UserDAO userDAO = new UserDAOImpl();
        LogInterceptor li = new LogInterceptor();
        li.setTarget(userDAO);
        
        //li.setTarget(userDAO);
        //newProxyInstance(代理的对象的class,产生被代理对象实现的接口,处理)
        //由于它实现了UserDAO接口,所以强制转化成。。。
        UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), new Class[]{UserDAO.class},li);
        //userDAOProxy.delete();
        userDAOProxy.save(new User());
        
    }

}

所用的包

posted on 2014-04-17 08:24  端着咖啡码农  阅读(247)  评论(0编辑  收藏  举报