springboot-day01-引入基础

1. 今日大纲

1、 了解Spring的发展

2、 掌握Springjava配置方式

3、 学习Spring Boot

4、 使用Spring Boot完成CRUD

2. Spring的发展

2.1. Spring1.x 时代

Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。

2.2. Spring2.x时代

随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。

 

那么,在实际生产中,究竟是应该使用xml还是注解呢?

 

最佳实践:

1、 应用的基本配置用xml,比如:数据源、资源文件、服务器的链接配置等;

2、 业务开发用注解,比如:Service中注入bean、controller中注入bean等;

2.3. Spring3.xSpring4.x

Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.xSpring boot都推荐使用java配置的方式。

3. SpringJava配置方式

Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。

3.1. @Configuration @Bean

SpringJava配置方式是通过 @Configuration @Bean 这两个注解实现的:

1@Configuration 作用于类上,相当于一个xml配置文件;

2@Bean 作用于方法上,相当于xml配置中的<bean>

3.2. 案例

案例演示了通过Java配置的方式进行配置Spring,并且实现了Spring IOC功能。

 

3.2.1.基于intellij idea创建web maven项目

  创建过程略,创建完成后的项目结构如下图

3.2.2. 导入依赖

  在pom.xml中添加依赖

 

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4   <groupId>com.day01.springboot.demo</groupId>
 5   <artifactId>day01_springboot_demo</artifactId>
 6   <packaging>war</packaging>
 7   <version>1.0-SNAPSHOT</version>
 8   <name>day01_springboot_demo Maven Webapp</name>
 9   <url>http://maven.apache.org</url>
10   <dependencies>
11  <!--   引入springmvc包-->
12     <dependency>
13       <groupId>org.springframework</groupId>
14       <artifactId>spring-webmvc</artifactId>
15       <version>4.3.7.RELEASE</version>
16     </dependency>
17 
18     <dependency>
19       <groupId>junit</groupId>
20       <artifactId>junit</artifactId>
21       <version>3.8.1</version>
22       <scope>test</scope>
23     </dependency>
24   </dependencies>
25   <build>
26     <finalName>day01_springboot_demo</finalName>
27   </build>
28 </project>

 

 

 

 3.2.3创建web项目结构如图

3.2.4.在model中创建User.java对象

 1 package com.day01.springboot.demo.model;
 2 
 3 /**
 4  * Created by Administrator on 2017/12/19.
 5  */
 6 public class User {
 7     private Integer id;
 8     private String userName;
 9     private String password;
10 
11     public Integer getId() {
12         return id;
13     }
14 
15     public void setId(Integer id) {
16         this.id = id;
17     }
18 
19     public String getUserName() {
20         return userName;
21     }
22 
23     public void setUserName(String userName) {
24         this.userName = userName;
25     }
26 
27     public String getPassword() {
28         return password;
29     }
30 
31     public void setPassword(String password) {
32         this.password = password;
33     }
34 }
User.java

 

3.2.5. 编写UserDao 用于模拟与数据库的交互

 

 1 package com.day01.springboot.demo.dao;
 2 
 3 import com.day01.springboot.demo.model.User;
 4 
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 /**
 9  * Created by Administrator on 2017/12/19.
10  */
11 public class UserDao {
12     public List<User> queryUserList(){
13         List<User> result = new ArrayList<User>();
14         // 模拟数据库的查询
15         for (int i = 0; i < 10; i++) {
16             User user = new User();
17             user.setId(i);
18             user.setUserName("知识帝-"+i);
19             user.setPassword("admin-"+i);
20             result.add(user);
21         }
22         return result;
23     }
24 }
UserDao.java

 

3.2.6.编写UserService 用于实现User数据操作业务逻辑

 1 package com.day01.springboot.demo.service;
 2 
 3 import com.day01.springboot.demo.dao.UserDao;
 4 import com.day01.springboot.demo.model.User;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Service;
 7 
 8 import java.util.List;
 9 
10 /**
11  * Created by Administrator on 2017/12/19.
12  */
13 @Service
14 public class UserService {
15     @Autowired // 注入Spring容器中的bean对象
16     private UserDao userDAO;
17 
18     public List<User> queryUserList() {
19         // 调用userDao中的方法进行查询
20         return userDAO.queryUserList();
21     }
22 }
UserService

3.2.7. 编写SpringConfig 用于实例化Spring容器

 1 package com.day01.springboot.demo;
 2 
 3 import com.day01.springboot.demo.dao.UserDao;
 4 import org.springframework.context.annotation.Bean;
 5 import org.springframework.context.annotation.ComponentScan;
 6 import org.springframework.context.annotation.Configuration;
 7 
 8 /**
 9  * Created by Administrator on 2017/12/19.
10  */
11 @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
12 @ComponentScan(basePackages = "com.day01.springboot.demo") //配置扫描包
13 public class SpringConfig {
14 
15     @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
16     public UserDao getUserDAO(){
17         return new UserDao(); // 直接new对象做演示
18     }
19 }
SpringConfig.java

3.2.8. 编写测试方法 用于启动Spring容器

 1 package com.day01.springboot.demo;
 2 
 3 import com.day01.springboot.demo.model.User;
 4 import com.day01.springboot.demo.service.UserService;
 5 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 6 
 7 import java.util.List;
 8 
 9 /**
10  * Created by Administrator on 2017/12/19.
11  */
12 public class Main {
13     public static void main(String[] args) {
14         // 通过Java配置来实例化Spring容器
15         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
16         // 在Spring容器中获取Bean对象
17         UserService userService = context.getBean(UserService.class);
18         // 调用对象中的方法
19         List<User> list = userService.queryUserList();
20         for (User user : list) {
21             System.out.println(user.getId()+" , "+user.getUserName() + ", " + user.getPassword() );
22         }
23         // 销毁该容器
24         context.destroy();
25     }
26 }
Main.java

 3.2.9.测试结果

0 , 知识帝-0, admin-0
1 , 知识帝-1, admin-1
2 , 知识帝-2, admin-2
3 , 知识帝-3, admin-3
4 , 知识帝-4, admin-4
5 , 知识帝-5, admin-5
6 , 知识帝-6, admin-6
7 , 知识帝-7, admin-7
8 , 知识帝-8, admin-8
9 , 知识帝-9, admin-9

该结果表示,我们虽然没有配置任何xml文件,但也可以设置于获取bean.由此可以得出结论:

使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。

 

posted @ 2017-12-18 17:48  李东平|一线码农  阅读(556)  评论(0编辑  收藏  举报