当前位置: 首页 > news >正文

网站浮动广告代码杭州公司注册多少钱

网站浮动广告代码,杭州公司注册多少钱,做原型网站,营销型网站分析在 Spring 框架中,推荐使用构造函数注入而非Autowired注解进行字段注入,主要有以下几个原因: 1. 依赖不可变和空指针安全 构造函数注入:使用构造函数注入时,依赖在对象创建时就必须提供,一旦对象创建完成&…

在 Spring 框架中,推荐使用构造函数注入而非@Autowired注解进行字段注入,主要有以下几个原因:

1. 依赖不可变和空指针安全

  • 构造函数注入:使用构造函数注入时,依赖在对象创建时就必须提供,一旦对象创建完成,其依赖关系就固定下来,不会再改变。这有助于确保对象的状态在整个生命周期中都是一致和可预测的。而且,由于依赖是在构造函数中注入的,在使用对象之前,依赖已经被初始化,不会出现空指针异常。
    • 举例:假设有一个UserService类,它依赖于UserRepository。使用构造函数注入的方式如下:
public class UserService {private final UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;}// 业务方法public User findUserById(Long id) {return userRepository.findById(id);}
}

在这个例子中,UserService在创建时就必须传入UserRepository实例,之后在调用findUserById方法时,userRepository肯定已经被初始化,不会出现空指针问题。

  • 字段注入:使用@Autowired注解进行字段注入时,依赖是在对象创建之后通过反射机制注入的。这就意味着在对象创建和依赖注入之间存在一个短暂的时间窗口,在这个窗口内,依赖可能为空。如果在依赖注入完成之前就访问依赖,就会导致空指针异常。
    • 举例:同样是UserService类,使用字段注入的方式如下:
public class UserService {@Autowiredprivate UserRepository userRepository;// 业务方法public User findUserById(Long id) {return userRepository.findById(id);}
}

在这个例子中,如果UserService在构造函数或者其他方法中过早地访问userRepository,而此时依赖注入还未完成,就可能会抛出空指针异常。

2. 便于单元测试

  • 构造函数注入:构造函数注入使得单元测试更加简单和直观。在进行单元测试时,只需要创建一个模拟的依赖对象,并通过构造函数传递给被测试对象即可。这使得测试代码与生产代码之间的依赖关系更加清晰,也更容易控制测试环境。
    • 举例:对于上述使用构造函数注入的UserService,单元测试可以这样写:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;public class UserServiceTest {@Testpublic void testFindUserById() {// 创建模拟的UserRepositoryUserRepository mockRepository = mock(UserRepository.class);when(mockRepository.findById(1L)).thenReturn(new User());// 通过构造函数创建UserService实例UserService userService = new UserService(mockRepository);// 调用方法进行测试User user = userService.findUserById(1L);assertNotNull(user);}
}
  • 字段注入:使用@Autowired注解进行字段注入时,在单元测试中需要使用反射或者其他复杂的技术来模拟依赖注入。这使得测试代码变得更加复杂,也增加了测试的难度和维护成本。
    • 举例:对于使用字段注入的UserService,单元测试可能需要这样写:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;@SpringBootTest
@ContextConfiguration
public class UserServiceTest {@Autowiredprivate ApplicationContext applicationContext;@Testpublic void testFindUserById() {// 创建模拟的UserRepositoryUserRepository mockRepository = mock(UserRepository.class);when(mockRepository.findById(1L)).thenReturn(new User());// 通过反射设置UserService的userRepository字段UserService userService = applicationContext.getBean(UserService.class);try {java.lang.reflect.Field field = UserService.class.getDeclaredField("userRepository");field.setAccessible(true);field.set(userService, mockRepository);} catch (NoSuchFieldException | IllegalAccessException e) {e.printStackTrace();}// 调用方法进行测试User user = userService.findUserById(1L);assertNotNull(user);}
}

可以看到,字段注入的测试代码更加复杂,需要使用反射来设置依赖,增加了测试的难度和维护成本。

3. 更好的代码可读性和可维护性

  • 构造函数注入:构造函数注入将对象的依赖关系明确地展示在构造函数的参数列表中。这使得代码的阅读者能够一眼看出该对象依赖于哪些其他对象,以及这些依赖是如何被初始化的。这种清晰的依赖关系有助于提高代码的可读性和可维护性。
    • 举例:对于前面的UserService类,通过构造函数注入,我们可以清楚地看到UserService依赖于UserRepository,并且依赖是在构造函数中进行初始化的。
  • 字段注入:使用@Autowired注解进行字段注入时,依赖关系被隐藏在字段声明中,没有在构造函数或者其他明显的位置展示。这使得代码的阅读者需要花费更多的时间和精力来理解对象的依赖关系和初始化过程。
    • 举例:在使用字段注入的UserService类中,依赖关系通过@Autowired注解隐藏在字段声明中,不直观。

http://www.yayakq.cn/news/832266/

相关文章:

  • 公司购买网站怎么做分录WordPress如何迁移数据
  • 济南 网站建设公司 医疗做网站的公司前三名
  • 查询个人房产信息网站wordpress帖子缩略图
  • 北京免费网站建设模板下载怎么查网站开发语言
  • 购物网站后台设计江阴做网站优化
  • 淄博网站建设找李光明seo外链推广
  • 如何做网站清风制作中国住房与城乡建设部网站
  • 谢岗网站建设公司app软件大全
  • 做网站去哪找客户前端和后端哪个常熬夜
  • 汕头网站快速排名白云区做网站
  • 建设厅网站查询电工证件建设厅官方网站河南
  • php网站 缓存新出的网络游戏排行榜
  • 商城微网站开发微网站白水网站建设
  • wordpress蜘蛛统计插件seo相关ppt
  • 安徽省建设干部培训学校网站没有备案的网站怎么做淘宝客
  • 淘宝的网站建设情况wordpress文404
  • 电子商务网站建设与维护考试修改WordPress图片上传
  • 常平网站开发青岛专业做外贸网站
  • 知名网站排行榜南宁隆安网站建设
  • 万载网站建设网站推广上首页
  • 厦门建设工程招标中心网站北京朝阳区二手房出售
  • 蓝田县建设局网站学生教育平台入口
  • asp.net做网站吗商标怎么注册
  • 企业网站建设计划wordpress get option
  • 母婴微网站设计规划网站优化反馈机制 seo
  • 东莞网站的建设南昌外包建站
  • 做饮食找工作哪个网站好营销网站建设教程
  • 凡科网站制作教程建设一个网站的费用构成
  • 怎么做网站收录的关键词兴义市建设局网站首页
  • 淘宝做女鞋在哪个网站找货网络营销环境的分析主要是