Spring入门
要使用Spring最起码需要引入两个依赖:
<!-- Spring Core(核心) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
</dependency>
<!-- Spring Context(容器) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
Spring本质上就是一个大的"容器",他可以帮我们创建(实例化)好我们需要的对象,我们需要
使用这些对象的时候,只需要给这个容器要就可以了,即从容器中取出来使用即可
最基本的使用Spring的方式:
public class SpringMain {
public static void main(String[] args) {
// 1.加载配置类
AnnotationConfigApplicationContext ctx = new
AnnotationConfigApplicationContext(SpringConfig.class);
// 2.从容器中取需要的对象
IHelloService helloService = ctx.getBean(IHelloService.class);
// 3.调用需要的对象方法
helloService.sayHello();
}
}
第一步干了啥?
//1. 加载配置类
AnnotationConfigApplicationContext ctx = new
AnnotationConfigApplicationContext(SpringConfig.class);
AnnotationConfigApplicationContext类是Spring自带的类,这个类的作用就是加载一个配置文件;
如果想知道加载的这个文件是不是一个配置类: SpringConfig怎么就知道它是一个配置类呢?
使用@Configuration注解:
//此注解就代表他是一个配置类
@Configuration
public class SpringConfig {
}
一般情况下,这个配置类,要想干点活,还得结合其他的注解一块参与:
比如以下场景: 需要再使用@ComponentScan注解参与其他逻辑
//此注解就代表这个类是一个配置类
@Configuration
//此注解用于扫描组件,把扫描到的组件,让Spring管理起来
@componentScan(basepack = "com.gengguolong.spring")
public class SpringConfig{
}
@ComponentScan此注解用于从指定的包下边进行所有的类扫描,它只扫描或搜索被@Component注解修饰的那些类,把那些类实例化好放到Spring容器里
第二步
IHelloService helloService = ctx.getBean(IHelloService.class);
从容器中,直接获取我想要的对象
第三步
helloService.sayHello();
需要注意的点:
默认情况下,Spring帮我们实例化好的对象,是单例,即我们每次使用ctx.getBean(“xxx”),从容器中取对象的时候,取多次也是同一个对象.
需要记住的点:
loc控制反转
以前我们需要什么对象的时候,自己来new,但现在使用了Spring框架,我们不用自己new了,用的时候直接给Spring要就行了.
以前new对象是由我们自己控制的,现在new对象不归我们管了,让Spring接手了,对new对象的控制权交给框架(第三方),这种模式叫做控制反转,也叫loc(Inversion of Control)
2.SpringBoot入门
SpringBoot框架是基于Spring的思想开发出来的一套快速的开发Web的框架,它的底层仍然是Servlet那一套
- 内部默认集成好了Tomcat,无需关心Tomcat服务器的配置.
- 内部默认集成好了一大批组件,用的时候开启(在配置文件里配置一下)即可.
SpringBoot的目的就是简化开发
SpringBoot项目的创建过程
-
创建项目:
-
选开发依赖的组件及框架
-
在项目的入口类同级,建立常规的项目包:
- 开始编写Controller
Controller用于接收用户输入.调用Service处理业务逻辑,给用户输出为了表明它是一个控制器类,使用@Controller注解标记
@controller
public class Mycontroller{
}
为了能让这个Controller接受用户请求,需要使用@RequestMapping注解标记URL
@controller
@RequestMapping("/my")
public class MyController{
public void hello(){
}
}
为了能让这个方法运行再次指定下一级URL地址
@Controller
@RequestMapping("/my")
public class MyController{
//请求地址是:/my/hello
@RequestMapping("/hello")
public void hello(){
System.out.println("hello你好,我来了");
}
}
接下来就可以运行了: http://localhost:8080/my/hello
以上只是在控制台输出内容,我想在游览器输出以上字符串怎么办? 使用@ResponseBody注解,代表方法的返回值作为响应体,响应给游览器,让游览器展示
@Controller
@RequestMapping("/my")
public class Myconntroller {
// 请求地址是:/my/hello
@RequestMapping("/hello")
@ResponseBody
public String hello(){
// System.out.println("hello你好,我来了。");
return "hello你好,我来了。";
}
}
nntroller {
// 请求地址是:/my/hello
@RequestMapping(“/hello”)
@ResponseBody
public String hello(){
// System.out.println(“hello你好,我来了。”);
return “hello你好,我来了。”;
}
}