码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot基础

时间:2016-09-20 13:50:00      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

1.定位main应用类,Spring Boot应用的入口

我们通常建议将main应用类放在位于其他类上面的根包( root package) 中。 通常使用 @EnableAutoConfiguration 注解
main类, 并且暗地里为某些项定义了一个基础“search package”。 例如, 如果你正在编写一个JPA应用,被 @EnableAutoConfiguration 注解的类所在包将被用来自动搜索 @Entity 项。会自动加载main应用类所在的包下的注解。
使用根包允许你使用 @ComponentScan 注解而不需要定义一个 basePackage 属性。 如果main类位于根包中, 你也可以使
用 @SpringBootApplication 注解。

下面是一个典型的项目结构:

com
+- example
+- myproject
+- Application.java
| +
- domain
| +- Customer.java
| +- CustomerRepository.java
| +
- service
| +- CustomerService.java
| +
- web
+- CustomerController.java

Application.java 文件将声明 main 方法, 还有基本的 @Configuration 。

package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.配置类@configuration

Spring Boot提倡基于Java的配置。 尽管你可以使用一个XML源来调用 SpringApplication.run() , 我们通常建议你使
用 @Configuration 类作为主要源。 一般定义 main 方法的类也是主要 @Configuration 的一个很好选择。
@Configuration主要配置生成Bean的配置类。

  • 导入其他配置类
    你不需要将所有的 @Configuration 放进一个单独的类。 @Import 注解可以用来导入其他配置类。 另外, 你也可以使
    用 @ComponentScan 注解自动收集所有的Spring组件, 包括 @Configuration 类。

  • 导入xml配置
    如果你必须使用基于XML的配置, 建议你仍旧从一个 @Configuration 类开始。 可以使用附加的 @ImportResource 注
    解加载XML配置文件。

3.自动配置

Spring Boot自动配置( auto-configuration) 尝试根据你添加的jar依赖自动配置你的Spring应用。 例如, 如果你的classpath下
存在 HSQLDB , 并且你没有手动配置任何数据库连接beans, 那么我们将自动配置一个内存型( in-memory) 数据库。
你可以通过将 @EnableAutoConfiguration 或 @SpringBootApplication 注解添加到一个 @Configuration 类上来选择自动配置。
注:你只需要添加一个 @EnableAutoConfiguration 注解。 建议你将它添加到主 @Configuration 类上。

  • 逐步替换自动配置
    自动配置是非侵占性的, 任何时候你都可以定义自己的配置类来替换自动配置的特定部分。 例如, 如果你添加自己
    的 DataSource bean, 默认的内嵌数据库支持将不会被加载。
    如果需要找出当前应用了哪些自动配置及应用, 你可以使用 --debug 开关启动应用。 这将会记录一个自动配置的报告
    并输出到控制台。

  • 禁用特定的自动配置
    如果发现应用了你不想要的特定自动配置类, 你可以使用 @EnableAutoConfiguration 注解的排除属性来禁用它们。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {

}

4.Spring Beans和依赖注入

你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。 简单起见, 经常使用 @ComponentScan 注解搜索beans, 并结合 @Autowired 构造器注入。
如果使用上面建议的结构组织代码( 将应用类放到根包下) , 你可以添加 @ComponentScan 注解而不需要任何参数。 你的所有应用程序组件( @Component , @Service , @Repository , @Controller 等) 将被自动注册为Spring Beans

下面是一个 @Service Bean的示例, 它使用构建器注入获取一个需要的 RiskAssessor bean。

package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DatabaseAccountService implements AccountService {
    private final RiskAssessor riskAssessor;
    @Autowired
    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    } 
// ...
}

注:注意如何使用构建器注入来允许 riskAssessor 字段被标记为 final , 这意味着 riskAssessor 后续是不能改变的。

5.使用@SpringBootApplication注解

很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。 遵循最简原则, Spring Boot提供一个方便的 @SpringBootApplication 以供选择。等同于原来的@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解同时使用

下面是@SpringBootApplication的注解

package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

SpringBoot基础

标签:

原文地址:http://www.cnblogs.com/sagech/p/5888360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!