为什么@Autowired
在这种情况下不能使用?
@SpringBootApplication
public class Application {
@Autowired
BookingService bookingService;
public static void main(String[] args) {
bookingService.book("Alice", "Bob", "Carol");
}
}
但可以使用 @Bean
@SpringBootApplication
public class Application {
@Bean
BookingService bookingService() {
return new BookingService();
}
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
BookingService bookingService = ctx.getBean(BookingService.class);
bookingService.book("Alice", "Bob", "Carol");
}
}
生成BookingService
同一事物的两种方式不是吗?
@Bean
并@Autowired
做两件事。此处的其他答案将更详细地解释,但更为简单:
@Bean
告诉Spring’这是此类的一个实例,请保留该类,并在我询问时将其还给我’。
@Autowired
说“请给我一个该类的实例,例如,我@Bean之前用注释创建的一个实例”。
那有意义吗?在第一个示例中,你要让Spring给你一个的实例BookingService
,但是你从未创建一个实例,因此Spring没有任何东西可以给你。在第二个示例中,你将创建一个的新实例BookingService
,将其告知Spring,然后在该main()方法中要求其返回。
如果需要,可以从第二种main()
方法中删除另外两行,并结合以下两个示例:
@SpringBootApplication
public class Application {
@Autowired
BookingService bookingService;
@Bean
BookingService bookingService() {
return new BookingService();
}
public static void main(String[] args) {
bookingService.book("Alice", "Bob", "Carol");
}
}
在这种情况下,@Bean
注释为Spring提供了BookingService
,并加以@Autowired
利用。
这将是一个毫无意义的示例,因为你都在同一个类中使用它们,但是如果你@Bean
在一个类中定义了该类,而在另一个类中定义了它,则它将变得很有用@Autowired
。
本文向大家介绍@Inject和@Autowired之间的区别,包括了@Inject和@Autowired之间的区别的使用技巧和注意事项,需要的朋友参考一下 @Inject和@Autowired这两个注释都用于在应用程序中自动装配。 @Inject批注是Java 6中引入的Java CDI的一部分,而@Autowire批注是spring框架的一部分。因此,两个注释都实现相同的目的,我们可以在应用程序
问题内容: 因此,如果我理解正确的话,两种方法都是在有多个候选对象的情况下确定要自动装配哪个bean的方法。那么到底有什么区别呢? 问题答案: 读取为“默认”。 如果一个Bean 没有 任何Bean ,并且存在多个该类型的Bean,则将选择标记的候选Bean ,即,当没有其他可用信息(即丢失)时,它是默认选择。 一个好的用例是,最初您只有一个类型的bean,因此没有使用任何代码。然后,当您添加另一
问题内容: 假设我有一个实体类,汽车。 我的IDE使我可以从实体类自动生成会话bean,因此最终得到了CarFacade 我也可以生成JSF托管bean 我可以理解Entity类和其他Bean之间的有意义的区别,但是无状态会话Bean和托管Bean之间有什么区别?我读到无状态会话Bean用于实现在实体上运行的业务逻辑,而托管Bean用于通过在托管Bean上使用网页调用方法并进行托管Bean调用来与
问题内容: 它们是不同的还是可以互换使用?如果它们不同,那么是什么使它们彼此不同? 问题答案: JavaBean只是一个普通的旧Java对象,它遵循某些约定,包括使用访问器函数(getFoo / setFoo)进行成员访问,提供默认构造函数以及类似的一些其他事情。 Enterprise JavaBean是Java EE应用程序服务器中的一个组件,它具有多种风味,具体细节因您所谈论的Java EE版
问题内容: 我是JSP和服务器端编程的新手。到目前为止,我正在使用Servlet和Java类。我正在借助Java类隔离我的应用程序(按照MVC模型)。我想知道Java Bean和Java类之间的区别。在哪种情况下,我可以使用Java Bean代替Java类。任何有用的解释或有用的链接? 问题答案: Java bean只是一个符合某些约定的类: 可以由getter(和setter访问的属性,如果这些
我已经读过关于EJB、Java Beans的文章,但是我仍然怀疑术语“bean”本身是什么意思? A)简单的术语“bean”本身存在吗? B)现在来看看Java beans。正如我所读到的,它只是一个普通的POJO,它遵循某种命名约定,并且有getter和setter?然而,我很难理解这种约定是如何使它们成为“可重用组件”的,正如我在包括SO在内的许多文章中所读到的那样。