SpringBoot

一、springboot的引言

Spring Boot是由Pivotal团队提供的全新框架.
目的:
	简化新Spring应用的初始搭建以及开发过程。
	该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

springboot=spring+springmvc

二、springboot特点

  • 创建独立的Spring应用 。
  • 内嵌的tomcat,所以不需要再次部署。
  • 简化maven配置 。
  • 自动配置 。
注意:
	java配置@Confirguation注解加在类上,表示当前类为配置类
	@bean加在方法上表示当前方法返回值是需要交由工厂管理的对象,方法名就是对象的名字。
	

三 springboot的两种环境搭建形式

  • 目录结构
		src/main/java
		    com. sanxia
		        entity
		        dao
		        service
		        Application.java   必须放置在主包内和子包同级
		src/main/resources
		        application.yml
		        application.yaml
		        application.properties
		        配置文件放置在resources目录,名字必须叫application
		src/test/java
		src/test/resources

3.1 maven形式搭建

3.1.1 引入依赖

<!--继承springboot的父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.7.RELEASE</version>
    </parent>

    <dependencies>
        <!--引入springboot的web支持-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        
    </dependencies>

3.1.2 创建入口类

/*
* 组合注解:一个注解包含多个注解的功能
* @SpringBootApplication=
* 	@Configuration+@ComponentScan+@EnableAutoConfiguration
* @Configuration:加在类上声明当前类 为配置类
* @ComponentScan:组件扫描,将扫描到的类交由工厂管理
    * @Repository
      @Component
      @Service
      @Controller
* @EnableAutoConfiguration:开启自动配置,一旦引入第三方的jar,springboot就可以帮你配制相关组件
* 
**/
@SpringBootApplication
@MapperScan(basePackages="com.cms.dao")
public class Application {
    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
}

3.1.3 写配置文件

server:
  port: 8092
  context-path: /springboot
  

3.1.4 测试

@RestController
@RequestMapping("/test")
public class UserController {
    @RequestMapping("/test")
    public String test(){
        return "hello springboot";
    }
}

3.1.5 测试类书写

//声明 是springbooot 的测试类//指定入口类
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class testAll {
    @Autowired
    private UserService userService;
       @Test
    public  void test1(){
        List<User> users = userService.queryAll();
        for (User user : users) {
            System.out.println(user);
        }
    }
 }

3.2 .springboot使用插件进行环境搭建

3.2.1 选择插件

在这里插入图片描述

3.2.2 勾选必要依赖

在这里插入图片描述

3.23 修改springboot的版本号

  • 修改springboot的jar版本为1.5.7

四 相关注解

4.1 SpringbootApplication

@SpringBootApplication
@MapperScan(basePackages = "com.baizhi.dao")
* 组合注解:一个注解包含多个注解的功能
* @SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiguration
*
* @Configuration:加在类上声明当前类 为配置类
* @ComponentScan:组件扫描,将扫描到的类交由工厂管理
    * @Repository
      @Component
      @Service
      @Controller

  @EnableAutoConfiguration:开启自动配置,一旦引入第三方的jar,springboot就可以帮你配制相关组件
	@ComponentScan(basePackages = "com.baizhi.*")
	@Configuration
	@EnableAutoConfiguration
	/*
	* 组合注解:一个注解包含多个注解的功能
	* @SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiguration
	* @Configuration:加在类上声明当前类 为配置类
	* @ComponentScan:组件扫描,将扫描到的类交由工厂管理
		* @Repository
		  @Component
		  @Service
		  @Controller
	  @EnableAutoConfiguration:开启自动配置,一旦引入第三方的jar,
	  	springboot就可以帮你配制相关组件
	* */

4.2 RestController

/*
* 组合注解@RestController=@Controller+ @ResponseBody
* 加在控制器类上表明当前类是控制器对象,并且返回json
*
* springboot默认的视图层模板不是jsp  thymeleaf
* */

五 springboot和mybatis集成

5.1 导入依赖

<!--mybatis相关jar  springboot和mybatis的整合jar封装了mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.3</version>
        </dependency>
        <!--mysql的驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <!--阿里数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>

5.2 配置文件配置

#数据源类型 以及参数
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springboot
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    
#mybatis相关配置  别名  mapper位置
mybatis:
  type-aliases-package: com.baizhi.entity
  mapper-locations: classpath:com/baizhi/mapper/*Mapper.xml
  

5.3 入口类相关配置

@SpringBootApplication
//指定dao位置从而创建dao的动态代理类
//指定dao的位置
@MapperScan(basePackages = "com.baizhi.dao")
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

六、spirngboot整合jsp

6.1 导入jar和插件

   <!--整合jsp-->  
    <--!内嵌tomcat支持的jar-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        
    <!--热部署,需要更改-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>1.5.7.RELEASE</version>
        </dependency>

6.2 配置视图解析器

spring:
	mvc:
    	view:
      		prefix: /
      		suffix: .jsp
#热部署  
 server
 	jsp-servlet:
    	init-parameters:
     	 	development: true

七、启动原理

在这里插入图片描述

八 自动配置的原理

8.1 Spring中的属性注入

8.1.1 构建配置文件

构建配置文件  jdbc.properties
jdbc.url=jdbc:mysql://localhost:3306/springboot
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.userName=root
jdbc.password=root

8.1.2 书写配置类完成属性注入

@PropertySource(value = "classpath:/jdbc.properties")
public class JavaConf {
    @Value("${jdbc.url}")
    public String url;
    @Value("${jdbc.password}")
    public String password;
    @Value("${jdbc.userName}")
    public String userName;
    @Value("${jdbc.driverClassName}")
    public String driverClassName;
}

8.2 springboot中的属性注入

8.2.1 在默认的application配置文件中加入相关参数

	server.port=8989
	jdbc.url=jdbc:mysql://localhost:3306/springboot
	jdbc.driverClassName=com.mysql.jdbc.Driver
	jdbc.userName=root
	jdbc.password=root

8.2.2 书写属性类

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProp {
    private String url;
    private String userName;
    private String password;
    private String driverClassName;
}

8.2.3 在配置类中注入属性类

@EnableConfigurationProperties(value = JdbcProp.class)
@Configuration
public class JavaConf {
    @Autowired
    JdbcProp jdbcProp;

    @Bean
    public DruidDataSource getDruidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(jdbcProp.getUrl());
        druidDataSource.setUsername(jdbcProp.getUserName());
        druidDataSource.setPassword(jdbcProp.getPassword());
        druidDataSource.setDriverClassName(jdbcProp.getDriverClassName());
        return druidDataSource;
    }

}

九 SpringBoot 整合logback

9.1 在idea中安装lombok插件

1.日志的级别:debug---info---warn--error 日志级别越低打印日志量越多,越详细
2.日志的分类: 父日志(根日志) 控制全局日志
子日志 某个包中的日志 子日志优先级高于父日志

在这里插入图片描述

9.2 引入lombok的jar

	<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
	<dependency>
	    <groupId>org.projectlombok</groupId>
	    <artifactId>lombok</artifactId>
	    <version>1.18.6</version>
	    <scope>provided</scope>
	</dependency>

9.3 相关注解


@Accessors(chain = true)  用在类上支持set方法的链式调用
@AllArgsConstructor       用在类上提供全参构造
@Data                     用在类上提供get set  tostring noargs hashcode and equals 
@Getter                   用在类上提供get   
@Setter                   用在类上提供set  
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode

十、 SpringBoot 整合Log4j

  • 1.日志的级别:debug—info—warn–error 日志级别越低打印日志量越多,越详细
  • 2.日志的分类: 父日志(根日志) 控制全局日志子日志 某个包中的日志 子日志优先级高于父日志
  • 3.Appender 为日志输出目的地,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  • 4.Layout:日志输出格式,Log4j提供的layout有以下几种
org.apache.log4j.HTMLLayout(以HTML表格形式布局)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
  • 5.打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息
	%m 输出代码中指定的消息
	%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
	%r 输出自应用启动到输出该log信息耗费的毫秒数
	%c 输出所属的类目,通常就是所在类的全名
	%t 输出产生该日志事件的线程名
	%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
	%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss ,SSS},输出类似:2002101822 : 10 : 28921
	%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:
	Testlog4.main(TestLog4.java: 10 )
  • 配置参考 log4j.properties
log4j.rootLogger=DEBUG, stdout

# SqlMap logging configuration...
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

十一、 SpringBoot 整合Logback

  • 基本配置
//命名必须为logback.xml然后放置在resources目录
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern> [%p] [%d{yyyy-MM-dd HH:mm:ss}] %m %n</pattern>
        </layout>
    </appender>
    <root level="info">
        <appender-ref ref="stdout"/>
</root>
    <logger name="com.sxyh.mapper" level="DEBUG"/>
</configuration>

  • 使用日志
    //构建logger对象
            private static Logger logger= LoggerFactory.getLogger(UserServiceImpl.class);
            //自定义日志
            logger.debug("this is debug");
            logger.info("this is info");
            logger.warn("this is warn");
            logger.error("this is error");

十二、SPI机制

  • Java中自带了所谓SPI机制,按照约定去META-INF/services目录里找各个接口的配置文件,找到接口的实现类,然后使用当前线程上线文类加载器定位到实现类加载器,通过其加载实现类,然后再反射newInstance得到实现类的实例。
  • Spring里也有类似的SPI,思路根上面类似,从classpath下所有jar包的META-INF/spring.factories 配置文件中加载标识为EnableAutoConfiguration的配置类,然后将其中定义的bean注入到Spring容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值