首页 >> 知识 >> @Autowierd 、@Resource、@RequiredArgsConstructor

@Autowierd 、@Resource、@RequiredArgsConstructor

@Autowierd 、@Resource

回顾一下Spring 的三种依赖注入

1.属性注入

public class SysUserController extends BaseController { @Autowired private ISysUserService userService; @Resource private ISysRoleService roleService;}

@Autowired默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean时,才会按类型装配。

@Qualifier和Autowired配合使用,指定bean的名称,也可以做到按名称装配。

IDEA中直接在变量上使用 @Autowired会发现警告提示:Field injection is not recommended。原因是官方建议草莓视频在线观看APP使用构造器注入方式,这种方式存在明显的弊端,比如:注入对象不能用final修饰、无法发现NullPointException的存在。

2.构造器注入

public class SysUserController extends BaseController { private final ISysUserService userService; private final ISysRoleService roleService; public SysUserController(ISysUserService userService, ISysRoleService roleService) { this.userService = userService; this.roleService = roleService; }}

构造器依赖注入通过容器触发一个类的构造器来实现的,通过强制指明依赖注入来保证这个类的运行,防止NullPointerException;

Spring官方推荐使用构造器注入不仅是因为这种情况下成员属性可以使用final关键字修饰,更关键的一点是能够避免循环依赖,如果存在循环依赖,Spring项目启动的时候就会报错。

3.Setter注入

public class SysUserController extends BaseController { private ISysUserService userService; @Autowired public void setUserService(ISysUserService userService) { this.userService = userService; }}

需要注意的是,在使用Setter注入时需要加@Autowired或@Resource注解,否则是无法注入成功的.

另外要注意一点,属性注入和Setter注入的变量都无法使用final关键字修饰。

@RequiredArgsConstructor

在说完Spring的三种依赖注入后,草莓视频在线观看APP来认识一下Lombok的@RequiredArgsConstructor 注解。

@Controller@RequiredArgsConstructorpublic class SysUserController extends BaseController { private final ISysUserService userService; private ISysRoleService roleService;//----------------------------}

使用 @RequiredArgsConstructor 会为草莓视频在线观看APP生成一个包含常量、使用final关键字修饰的变量的私有构造方法。

那草莓视频在线观看APP就可以不使用属性注入(@Autowired和@Resource)的方式,直接通过构造器的方式来完成注入,不仅能够省略简化许多代码,也解决了属性注入可能存在的空指针问题。

网站地图