Spring的核心是提供了一个容器(container),通常称为Spring应用上下文(Spring application context),它们会创建和管理应用组件。这些组件也可以称为bean,会在Spring应用上下文中装配在一起,从而形成一个完整的应用程序。
将bean装配在一起的行为是通过一种基于依赖注入(dependency injection,DI)的模式实现的。此时,组件不会再去创建它所依赖的组件并管理它们的生命周期,使用依赖注入的应用依赖于单独的实体(容器)来创建和维护所有的组件,并将其注入到需要它们的bean中。通常,这是通过构造器参数和属性访问方法来实现的。
在历史上,一般通过两种配置方式为Spring应用上下文提供Bean
使用一个或多个XML文件描述bean使用@Configuration注解会告知Spring这是一个配置类随着Spring Boot 2.x的引入,Spring自动配置的能力已经大大加强,Spring Boot能够基于类路径中的条目、环境变量和其他因素合理猜测需要配置的组件并将它们装配在一起。Java程序员尽可能多地使用Spring Boot,只有在必要的时候才使用显式配置。
可参见本人博客《Maven POM( Project Object Model,项目对象模型 )》及《一图说清maven常见要素》这两篇文章。
入口类 /** * SpringBoot应用 */ @SpringBootApplication public class DemoApplication { public static void main(String[] args) { // 运行应用 SpringApplication.run(DemoApplication.class, args); } }@SpringBootApplication是一个组合注解,它组合了3个其他的注解。
@SpringBootConfiguration:将该类声明为配置类。尽管这个类目前还没有太多的配置,但是后续我们可以按需添加基于Java的Spring框架配置。这个注解实际上是@Configuration注解的特殊形式。@EnableAutoConfiguration:启用Spring Boot的自动配置。我们随后会介绍自动配置的更多功能。就现在来说,我们只需要知道这个注解会告诉SpringBoot自动配置它认为我们会用到的组件。@ComponentScan:启用组件扫描。这样我们能够通过@Component@Controller、@Service这样的注解声明其他类,Spring会自动发现它们并将它们注册为Spring应用上下文中的组件。8. 测试类
// SpringBoot测试 @SpringBootTest class DemoApplicationTests { // 测试方法 @Test void contextLoads() { } } 程序启动index()是一个简单的控制器方法。它带有@GetMapping注解,表明如果针对“/”发送HTTP GET请求,那么这个方法将会处理请求。该方法所做的只是返回String类型的index值,该控制器方法中还通过Spring自动注入IndexService服务组件,及调用服务组件方法。
/** * 第一个SpringMVC程序--Controller层 * * @author zhuhuix * @date 2020-07-02 */ @Controller public class IndexController { // Spring注入服务组件 @Autowired private IndexService indexService; @GetMapping("/") public String index(Model model) { String index = indexService.getIndex(); model.addAttribute("index", index); // 返回视图 即index.html return "index"; } } 第一个ServicegetIndex()是一个简单的服务方法。该方法所做的只是返回String类型的index值,该服务组件供控制层调用。
/** * 第一个SpringMVC程序--Service层 * * @author zhuhuix * @date 2020-07-02 */ @Service public class IndexService { public String getIndex() { return "hello world!!!"; } } 第一个View– 使用Thymeleaf模板引擎
### application.properties ###ThymeLeaf配置 spring: thymeleaf: #模板的模式,支持 HTML, XML TEXT JAVASCRIPT mode: HTML5 #编码 可不用配置 encoding: UTF-8 #内容类别,可不用配置 content-type: text/html #开发配置为false,避免修改模板还要重启服务器 cache: false #配置模板路径,默认是templates,可以不用配置 prefix: classpath:/templates– 定义index.html视图层
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" > <head> <meta charset="UTF-8"/> <title>Title</title> </head> <body> <p th:text="${index}" /> </body> </html> 运行测试•代码变更后应用会自动重启; •当面向浏览器的资源(如模板、JavaScript、样式表)等发生变化时,会自动刷新浏览器
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>runtime</scope> </dependency> ... </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork : devtools生效必须设置成true --> <fork>true</fork> </configuration> </plugin> </plugins> </build> idea设置 – 需勾选Build project automaticallty – ctrl+alt+shift+/ :Registry 中第一项必须打勾