目录
SpringBoot VS Servlet
Spring是什么?
loC:控制反转
DI
创建一个Spring项目
创建一个Spring IOC容器
注册Bean对象
获取Bean对象
注意事项:
类注解
为什么有这么多类注解?
注册与注入
方法注解 @Bean
SpringBoot VS Servlet
当我们用Servlet开发一个项目时步骤是:
- 创建Maven项目
- 配置pom.xml(添加需要的依赖包、添加webapp/WEB-INF/web.xml文件及内容)
- 添加Servlet代码:@WebServlet注解+重写doXXX方法
- 配置Tomcat:添加Tomcat
- 部署项目:破解版需要自己手动设置
当我们用框架开发一个项目时:
- 创建maven项目
- 修改pom.xml:添加ee框架的依赖包(ee框架搭建项目还可以创建一个Spring Initializer的项目,或者在Sring官网下载一个项目模板)
- 准备spring约定的文件
Spring是什么?
Spring框架即Spring Framework,它是一个开源框架,支持广泛的应用场景。用一句话概括就是:Spring是包含了众多方法的loC(控制反转)容器。那什么是loC呢?
loC:控制反转
实例化对象及组织对象间的依赖关系,都交给loC容器来进行管理,控制权由程序自己控制,转变为loC容器控制,控制权发生反转,所以叫loC容器。
DI
说到 IoC 不得不提的一个词就是 “DI” , DI 是 Dependency Injection 的缩写,翻译成中文是 “ 依赖注入 ” 的意思。所谓依赖注入,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。所以,依赖注入(DI )和控制反转( IoC )是从不同的角度的描述的同一件事情,就是指通过引入 IoC 容器,利用依赖关系注入的方式,实现对象之间的解耦。解耦:自己写代码来创建对象及组织依赖关系,属于强耦合的(就是一个地方改,依赖这个地方的其他地方都得改),使用框架后,框架自动给我们组织依赖关系,解耦。loC与DI :loC是一个目标也是一种思想,而DI是这个目标的具体实现
创建一个Spring项目
我用的是Maven的方式创建一个Spring项目,可以分为以下三步:
- 创建一个普通的Maven项目
- 添加Spring框架支持(Spring-context、Spring-beans)
- 添加启动类
创建一个Spring IOC容器
ApplicationContext context=new AnnotationConfigApplicationContext("org.example");
ApplicationContext就是Spring容器的顶级接口
AnnotationConfigApplicationContext是其中一个实现类,它的作用是
- 扫描指定的包路径下,使用Spring框架注解的类(在上面代码扫描的是org.example)
- 注册这些类到容器中(框架帮我们new对象,及注入对象的依赖关系)
注册Bean对象
@Controller
//@Service
//@Repository
//@Component
public class Bean对象1 {
public void sayHello(){
System.out.println("Hello");
}
}
@Controller
//@Service
//@Repository
//@Component以上四个类注解都是用于注册Bean对象
获取Bean对象
获取bean对象的方式有两种
(1)通过Bean的类型
(1)通过Bean的类型获取
Bean对象1 b1=context.getBean(Bean对象1.class);
(2)通过Bean的id
(2)通过Bean的id
Bean对象1 b1_1=(Bean对象1) context.getBean("bean对象1");
注意事项:
- 一定要被扫描到,才能注册到容器中(一定要在指定的包路径下,指定类注解)
- 默认注册到容器中的bean id,是类名首字母小写,如果类名开始两个连续字母大写,bean id就是类名
- @Controller
@Service
@Repository
@Component这四个注册Bean对象的类注解默认都是单例的方式注册,注册为普通的java bean对象,还有一个@Configuration注册为配置类对象
类注解
想要将对象存储在Spring中,有两种注解类型可以实现:
类注解:@Controller(控制器存储)、@Service(服务存储)、@Repository(仓库存储)、@Component(组件存储)、@Configuration(配置存储)
方法注解:@Bean
为什么有这么多类注解?
这么多类注解,就是让程序员看到类注解之后,就能直接了解当前类的用途。
程序的工程分层,调用流程如下:
@Component:一般组件使用,除了以上明确含义的类注解作用,之前的作用,就可以使用AComponent注解。
注册与注入
注册bean对象:按框架约定的写法(目前是几个类注解),框架给我们new对象。
注入依赖关系:按框架约定的写法(属性注解),框架给我们组织依赖关系(把容器中的对象赋值给属性)
方法注解 @Bean
类注解是添加到某个类上的,而方法注解是放到某个方法上的。
@Configuration
public class AppConfig {
@Bean
public Bean对象1 test_1(){
Bean对象1 bean对象1=new Bean对象1();
bean对象1.sayHello();
return bean对象1;
}
}
注意点:
- 只有类被扫描到,且注册到容器中,方法上的@Bean注解才生效
- @Bean注解的方法,所在的类,需要五种类注解之一(一般是在@Configuration配置类中)