本文介绍: 总之,虽然@Autowired注解可以方便地进行依赖注入,但是在使用需要注意其限制潜在问题。在需要注入finalstatic类型变量时,或者当一个类需要承担过多的职责时,建议使用基于构造函数依赖注入。

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不建议字段使用原因有以下几点:

  1. 无法用于final修饰变量:在基于字段依赖注入中,如果字段final类型,那么这个字段的值在类实例化的过程中就需要被初始化。然而,@Autowired注解无法在初始化时注入final类型的变量,因此需要使用基于构造函数依赖注入。
  2. 掩饰单一职责的设计思想:如果一个使用了过多的@Autowired注解,那么这个类的构造函数参数可能会变得很庞大。这可能会违反单一职责原则,使得这个类承担了过多的职责。使用基于构造函数的依赖注入可以避免这个问题
  3. 可能导致循环依赖:当两个类互相注入时,就可能形成一个循环依赖。例如,类A注入了类B的实例,而类B又注入了类A的实例,这样就会形成一个无法解析循环依赖。为了避免这种情况,建议使用基于构造函数的依赖注入。
  4. 无法设置finalstatic变量:基于字段的依赖注入无法将注入的对象设置finalstatic变量。这是因为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进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注