spring入门篇5 --- IOC思想,使用注解实现小项目

接下来用之前写的小项目来实现注解

首先看一下操控的,@Data注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法,代码比以前简洁很多,@Data属于Lombok包,记得引入 

package com.yang.bean;

import lombok.Data;

@Data  // 可以帮助我们创建无参构造函数
public class User {
    private int id;
    private String name;
    private String sex;

    public User(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }
}

dao层,接下来我们看一下dao层,标志符使用的是Repository进行通知spring扫描,这个只是spring的一个规定,效果与component一样

package com.yang.dao;

import com.yang.bean.User;

import java.util.List;

public interface UserDao {
    List<User> getUsers();
}

package com.yang.dao.Impl;

import com.yang.bean.User;
import com.yang.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Repository  // Dao层,功能与component一样
public class UserDaoImpl implements UserDao {

    @Autowired
    private DataSources dataSources;

    public List<User> getUsers() {
        System.out.println("模拟查询数据库" + dataSources);
        User user1 = new User(1, "ning", "male");
        User user2 = new User(2, "ming", "male");
        User user3 = new User(3, "hong", "female");
        List<User> list = new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        return list;
    }
}

service层,标志位使用的是@Service

package com.yang.service;

import com.yang.bean.User;

import java.util.List;

public interface UserService {
    List<User> getUsers();
}


package com.yang.service.Impl;

import com.yang.bean.User;
import com.yang.dao.UserDao;
import com.yang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDao userDao;

    public List<User> getUsers() {
        return userDao.getUsers();
    }
}

controller层,标志位使用的是@COntroller

package com.yang.controller;

import com.yang.bean.User;
import com.yang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import java.util.List;

@Controller  // controller层的通知spring来进行扫描的,功能与component一样
public class UserController {

    @Autowired// 自动加载相关对象
    UserService uc;

    public void getUsers() {
        List<User> userList = uc.getUsers();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

测试层,我们看一下ceshiceng,它使用ContextConfiguration注解来代替我们之前新建的一个context对象,内部直接使用@Autowired进行注入对象,比以前写的简洁了

package com.yang.test;

import com.yang.controller.UserController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)   // 这个就是使用spring+Junit框架
@ContextConfiguration("classpath:applicationContext.xml") // 加载spring的配置文件
public class TestUser {
    @Autowired
    UserController uc;

    @Test
    public void test1() {
        uc.getUsers();
    }
}

这个就是IOC思想,就是对象的管理交给spring,我们只负责使用即可。

posted @ 2020-01-14 13:50  灬灬灬灬灬灬  阅读(126)  评论(0编辑  收藏  举报