SpringBoot:快速入门

来自Wikioe
Eijux讨论 | 贡献2020年11月2日 (一) 23:28的版本 →‎实例
跳到导航 跳到搜索


Spring的发展

  1. Spring1.x:
    通过xml文件配置bean:随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。
  2. Spring2.x:
    (JDK 1.5 注解支持)使用注解对Bean进行申明和注入:大大的减少了xml配置文件,同时也大大简化了项目的开发。
    1. 应用的基本配置用xml(如:数据源、资源文件等);
    2. 业务开发用注解(如:Service中注入bean等);
  3. Spring3.x(Spring4.x):
    推荐使用Java配置方式:可以完全替代xml配置。

Spring的Java配置方式

(Java配置是Spring4.x推荐的配置方式)
Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:

  1. @Configuration:标记类,相当于一个xml配置文件;
  2. @Bean:标记方法,相当于xml配置中的“<bean>”;


其他配置类注解:

  1. 读取外部的资源配置文件:
    1. @PropertySource:指定读取的配置文件;
    2. @Value:获取配置文件的配置项;


示例:配置数据库连接池:

// 通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@Configuration
// 配置扫描包,相当于xml中的"<context:component-scan ...>"
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig")
//加载配置文件
@PropertySource(value = { "classpath:jdbc.properties", "xxx.properties" }, ignoreResourceNotFound = true)
public class SpringConfig {

    @Bean
    // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    //1、相当于xml中的<bean>标签
    //2、相当于类中的@Service类的注解
    //所以"UserDAO"可以用于"UserService"属性注入
    public UserDAO getUserDAO() {
        return new UserDAO(); // 直接new对象做演示
    }
    //返回值,相当于<bean>中的"class"属性
    //方法名称,相当于<bean>中的"id"属性?
    
    // 获取配置文件的配置项
    @Value("${jdbc.url}")
    private String jdbcUrl;

    @Value("${jdbc.driverClassName}")
    private String jdbcDriverClassName;

    @Value("${jdbc.username}")
    private String jdbcUsername;

    @Value("${jdbc.password}")
    private String jdbcPassword;

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
        // 数据库驱动
        boneCPDataSource.setDriverClass(jdbcDriverClassName);
        // 相应驱动的jdbcUrl
        boneCPDataSource.setJdbcUrl(jdbcUrl);
        // 数据库的用户名
        boneCPDataSource.setUsername(jdbcUsername);
        // 数据库的密码
        boneCPDataSource.setPassword(jdbcUsername);
        // 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
        boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
        // 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
        boneCPDataSource.setIdleMaxAgeInMinutes(30);
        // 每个分区最大的连接数
        boneCPDataSource.setMaxConnectionsPerPartition(100);
        // 每个分区最小的连接数
        boneCPDataSource.setMinConnectionsPerPartition(5);
        return boneCPDataSource;
    }
}

实例

  1. 创建工程以及导入依赖:
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>cn.itcast.springboot</groupId>
    	<artifactId>itcast-springboot</artifactId>
    	<version>1.0.0-SNAPSHOT</version>
    	<packaging>war</packaging>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>4.3.7.RELEASE</version>
    		</dependency>
    		<!-- 连接池 -->
    		<dependency>
    			<groupId>com.jolbox</groupId>
    			<artifactId>bonecp-spring</artifactId>
    			<version>0.8.0.RELEASE</version>
    		</dependency>
    	</dependencies>
    	<build>
    		<finalName>${project.artifactId}</finalName>
    		<plugins>
    			<!-- 资源文件拷贝插件 -->
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-resources-plugin</artifactId>
    				<configuration>
    					<encoding>UTF-8</encoding>
    				</configuration>
    			</plugin>
    			<!-- java编译插件 -->
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<configuration>
    					<source>1.7</source>
    					<target>1.7</target>
    					<encoding>UTF-8</encoding>
    				</configuration>
    			</plugin>
    		</plugins>
    		<pluginManagement>
    			<plugins>
    				<!-- 配置Tomcat插件 -->
    				<plugin>
    					<groupId>org.apache.tomcat.maven</groupId>
    					<artifactId>tomcat7-maven-plugin</artifactId>
    					<version>2.2</version>
    				</plugin>
    			</plugins>
    		</pluginManagement>
    	</build>
    </project>
    
  2. 编写User对象:
    public class User {
    
        private String username;
        private String password;
        private Integer age;
    
        // getter & setter & toString
    }
    
  3. 编写UserDao接口:
    public interface UserDaoUserDao {
        //根据id查询用户信息
    	public User findUserById(int id) throws Exception;
    }
    
  4. 编写UserDaoImpl接口:(mybatis)
    public class UserDaoImpl implements UserDao {
    
    	// 需要向dao实现类中注入SqlSessionFactory
    	// 这里通过构造方法注入
    	private SqlSessionFactory sqlSessionFactory;
    
    	public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
    		this.sqlSessionFactory = sqlSessionFactory;
    	}
    
    	@Override
    	public User findUserById(int id) throws Exception {
    		SqlSession sqlSession = sqlSessionFactory.openSession();
    
    		User user = sqlSession.selectOne("test.findUserById", id);
    		// 释放资源
    		sqlSession.close();
            
    		return user;
    	}
    }
    
  5. 编写UserService实现User数据操作业务逻辑:
    @Service
    public class UserService {
    
        @Autowired // 注入Spring容器中的bean对象
        private UserDaoImpl UserDaoImpl;
    
        public User findUserById(int id) throws Exception {
            // 调用userDAO中的方法进行查询
            return this.UserDaoImpl.findUserById(id);
        }
    }
    
  6. 编写SpringConfig用于实例化Spring容器
    @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
    @ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
    public class SpringConfig {
        
        @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
        public UserDao getUserDao(){
            return new UserDao(); // 直接new对象做演示
        }
    }
    
  7. 编写测试方法,启动Spring容器
    public class Main {
        
        public static void main(String[] args) {
            // 通过Java配置来实例化Spring容器
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
            // 对比使用:使用xml方式的“加载spring配置文件”
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
            // 对比使用:使用xml方式的“根据配置创建对象”
            UserService userService = (UserService) context.getBean("userService");
            
            // 在Spring容器中获取Bean对象
            UserService userService = context.getBean(UserService.class);
            
            // 调用对象中的方法
            List<User> list = userService.queryUserList();
            for (User user : list) {
                System.out.println(user.getUsername() + ", " + user.getPassword() + ", " + user.getPassword());
            }
            
            // 销毁该容器
            context.destroy();
        }
    }
    

实例化Spring容器:xml与Java配置

对比,“xml、注解”于“Java配置类”的实例化Spring容器:

    // 通过Java配置来实例化Spring容器
    // 1、Java配置类
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
    // 2、xml、注解
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    
    // 在Spring容器中“获取Bean对象”
    // 1、Java配置类
    UserService userService = context.getBean(UserService.class);
    // 2、xml、注解
    UserService userService = (UserService) context.getBean("userService");

Spring Boot

快速入门

SpringBoot核心

自动配置的原理