接下来用之前写的小项目来实现注解
首先看一下操控的,@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,我们只负责使用即可。