本文介绍: 总之,虽然@Autowired注解可以方便地进行依赖注入,但是在使用时需要注意其限制和潜在问题。在需要注入final或static类型的变量时,或者当一个类需要承担过多的职责时,建议使用基于构造函数的依赖注入。
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类型的变量时,或者当一个类需要承担过多的职责时,建议使用基于构造函数的依赖注入。
原文地址:https://blog.csdn.net/m0_65152767/article/details/134743699
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_26636.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。