依赖注入 接口是什么(从@Resource到@Autowired:依赖注入中的两大战将,该选择哪一个)java基础 / Java Web开发中的依赖注入框架...

wufei123 发布于 2024-07-04 阅读(3)

Spring Framework是一款广泛应用于Java开发的轻量级框架Spring Framework提供了很多核心功能,如依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming),这些功能大大简化了应用程序的开发和维护。

在Spring Framework中,@Resource和@Autowired是两个重要的注解,它们都可以用来进行依赖注入,但在使用时却存在一些差异那么,既生@Resource,何生@Autowired?这是本文要探讨的问题。

一、@Resource和@Autowired的区别@Resource和@Autowired都是Spring Framework中用来进行依赖注入的注解,但它们在使用时有一些不同点名称匹配规则不同@Autowired 先根据接口的类型注入 , 如果对应的类找不到 , 会扫描容器中Bean的名字进行注入。

:@ServicepublicclassUserServiceImplimplementsUserService{ @Autowiredprivate UserDao userDao; } 在上面的代码中,@Autowired会寻找名为"userDao"的bean并将其注入到userDao字段中。

如果有多个名为"userDao"的bean,则会按照类型进行匹配而@Resource则默认按照名称进行注入,如果名称匹配多个bean,则抛出异常例如:@ServicepublicclassUserServiceImpl。

implementsUserService{ @Resourceprivate UserDao userDao; } 在上面的代码中,@Resource会寻找名为"userDao"的bean并将其注入到userDao字段中。

如果有多个名为"userDao"的bean,则会抛出异常如果要使用@Resource进行按类型匹配,则需要设置其name属性例如:@ServicepublicclassUserServiceImplimplements

UserService{ @Resource(name="userDaoImpl") private UserDao userDao; } 在上面的代码中,@Resource会寻找类型为UserDao的bean并将其注入到userDao字段中。

如果有多个类型为UserDao的bean,则需要通过name属性来指定要注入的bean支持的注入方式不同@Autowired支持按照类型、名称、构造函数进行注入例如:@Servicepublicclass。

UserServiceImplimplementsUserService{ @AutowiredpublicUserServiceImpl(UserDao userDao){ this

.userDao = userDao; } } 在上面的代码中,@Autowired会将UserDao类型的bean注入到构造函数中而@Resource只支持按照名称进行注入例如:@Service。

publicclassUserServiceImplimplementsUserService{ @Resource(name="userDaoImpl") private UserDao userDao; }

在上面的代码中,@Resource会将名为"userDaoImpl"的bean注入到userDao字段中@Autowired可以为null,@Resource必须存在@Autowired可以标注在字段或者方法上,如果没有匹配的bean,则该字段或方法的值为null。

例如:@ServicepublicclassUserServiceImplimplementsUserService{ @Autowired(required=false) private

UserDao userDao; } 在上面的代码中,如果没有名为"userDao"的bean,则userDao的值为null而@Resource必须存在匹配的bean,否则会抛出异常例如:@Service。

publicclassUserServiceImplimplementsUserService{ @Resourceprivate UserDao userDao; } 在上面的代码中,如果没有名为"userDao"的bean,则会抛出异常。

二、@Resource和@Autowired的使用场景@Resource和@Autowired都可以用来进行依赖注入,但在使用时应根据实际情况选择。

@Autowired的使用场景@Autowired适用于按照类型注入的场景,例如:@ServicepublicclassUserServiceImplimplementsUserService{

@Autowiredprivate UserDao userDao; } 在上面的代码中,@Autowired会将类型为UserDao的bean注入到userDao字段中,这种方式比较简洁另外,@Autowired还适用于按照名称注入的场景,例如:。

@Service public class UserServiceImpl implements UserService { @Autowired@Qualifier("userDaoImpl"

) private UserDao userDao; } 在上面的代码中,@Autowired会将名为"userDaoImpl"的bean注入到userDao字段中,@Qualifier用来指定要注入的bean。

@Resource的使用场景@Resource适用于按照名称注入的场景,例如:kotlinCopy code@ServicepublicclassUserServiceImplimplementsUserService

{ @Resource(name="userDaoImpl") private UserDao userDao; } 在上面的代码中,@Resource会将名为"userDaoImpl"的bean注入到userDao字段中。

如果需要按照类型注入,则需要设置其name属性,例如:@ServicepublicclassUserServiceImplimplementsUserService{ @Resource(name=

"userDaoImpl") private UserDao userDao; } 在上面的代码中,@Resource会将类型为UserDao的bean注入到userDao字段中。

四、使用建议如果项目只使用了Spring Framework,建议使用@Autowired注解如果项目同时使用了Java EE和Spring Framework,建议使用@Resource注解如果需要按照名称进行注入,则建议使用@Resource注解。

如果需要按照类型进行注入,则建议使用@Autowired注解在使用@Autowired注解时,建议搭配使用@Qualifier注解,来指定需要注入的bean的名称五、结论综上所述,@Autowired和@Resource都是Spring Framework中用来进行依赖注入的注解,它们的作用类似,但是它们之间还是有一些区别的。

在实际开发中,应根据实际情况选择使用哪种注解,以达到最佳的效果

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻95042