0.spring入门代码
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService userService = (UserService) context.getBean("userService");
userService.test();
- 第一行代码,会构造一个ClassPathXmlApplicationContext对象,ClassPathXmlApplicationContext该如何理解,调用该构造方法除开会实例化得到一个对象,还会做哪些事情?
- 第二行代码,会调用ClassPathXmlApplicationContext的getBean方法,会得到一个UserService对象,getBean()是如何实现的?返回的UserService对象和我们自己直接new的UserService对象有区别吗?
- 第三行代码,就是简单的调用UserService的test()方法,不难理解。
但是用ClassPathXmlApplicationContext其实已经过时了,在新版的Spring MVC和Spring Boot的底层主要用的都是AnnotationConfigApplicationContext,比如:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
//ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService userService = (UserService) context.getBean("userService");
userService.test();
可以看到AnnotationConfigApplicationContext的用法和ClassPathXmlApplicationContext是非常类似的,只不过需要传入的是一个class,而不是一个xml文件。
spring.xml文件中内容为,扫描某个java包,以及指定某个bean
<context:component-scan base-package="com.xk"/>
<bean id="userService" class="com.xk.UserService"/>
AppConfig中的内容为:
@ComponentScan("com.xk")
public class AppConfig {
@Bean
public UserService userService(){
return new UserService();
}
}
上述2种实现本质上是一样的。
循环依赖以及三级缓存
![在这里插入图片描述](https://img-blog.csdnimg.cn/99603af027e94d5da48c8d1f6925223b.jpeg#pic_center