1、SysUserService.java
package com.atguigu.schedule.service; import com.atguigu.schedule.pojo.SysUser; public interface SysUserService { SysUser getSysUser(SysUser sysUser); }
2、SysUserServiceImpl.java
package com.atguigu.schedule.service.impl; import com.atguigu.schedule.mapper.SysUserMapper; import com.atguigu.schedule.pojo.SysUser; import com.atguigu.schedule.service.SysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class SysUserServiceImpl implements SysUserService { @Autowired private SysUserMapper sysUserMapper; @Override @Transactional(readOnly = true) public SysUser getSysUser(SysUser sysUser) { return sysUserMapper.getSysUser(sysUser); } }
3、ScheduleQueryVo.java
package com.atguigu.schedule.vo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; //日程的查询条件封装成一个java对象,我们将这样的对象称之为查询条件对象(Query Object) @Data @NoArgsConstructor @AllArgsConstructor public class ScheduleQueryVo { private Integer uid; private Integer pageNum; //页码:显示第几页 private Integer pageSize = 3; //页大小 }
3、ScheduleService.java
package com.atguigu.schedule.service; import com.atguigu.schedule.pojo.Schedule; import com.atguigu.schedule.vo.ScheduleQueryVo; import com.github.pagehelper.PageInfo; public interface ScheduleService { PageInfo<Schedule> getSchedulePageInfo(ScheduleQueryVo queryVo); }
4、ScheduleServiceImpl.java
package com.atguigu.schedule.service.impl; import com.atguigu.schedule.mapper.ScheduleMapper; import com.atguigu.schedule.pojo.Schedule; import com.atguigu.schedule.service.ScheduleService; import com.atguigu.schedule.vo.ScheduleQueryVo; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @Transactional public class ScheduleServiceImpl implements ScheduleService { @Autowired private ScheduleMapper scheduleMapper; @Override @Transactional public PageInfo<Schedule> getSchedulePageInfo(ScheduleQueryVo queryVo) { PageHelper.startPage(queryVo.getPageNum(), queryVo.getPageSize()); List<Schedule> scheduleList = scheduleMapper.getScheduleList(queryVo.getUid()); return new PageInfo<>(scheduleList); } }
5、@Autowired不建议在字段上使用的原因有以下几点:
- 无法用于final修饰的变量:在基于字段的依赖注入中,如果字段是final类型,那么这个字段的值在类实例化的过程中就需要被初始化。然而,@Autowired注解无法在初始化时注入final类型的变量,因此需要使用基于构造函数的依赖注入。
- 掩饰单一职责的设计思想:如果一个类使用了过多的@Autowired注解,那么这个类的构造函数参数可能会变得很庞大。这可能会违反单一职责原则,使得这个类承担了过多的职责。使用基于构造函数的依赖注入可以避免这个问题。
- 可能导致循环依赖:当两个类互相注入时,就可能形成一个循环依赖。例如,类A注入了类B的实例,而类B又注入了类A的实例,这样就会形成一个无法解析的循环依赖。为了避免这种情况,建议使用基于构造函数的依赖注入。
- 无法设置final或static变量:基于字段的依赖注入无法将注入的对象设置为final或static变量。这是因为final类型的变量需要在类实例化的过程中进行初始化,而基于字段的依赖注入无法在初始化时注入final类型的变量。同时,由于字段注入需要在类实例化之后才能进行,因此也无法注入static类型的变量。
总之,虽然@Autowired注解可以方便地进行依赖注入,但是在使用时需要注意其限制和潜在问题。在需要注入final或static类型的变量时,或者当一个类需要承担过多的职责时,建议使用基于构造函数的依赖注入。