1.编写SpringConfig 用于实例化Spring容器
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个
xml
文件
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
public class SpringConfig {
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
}
}
2.读取外部文件
通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法:
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
@PropertySource(value= {"classpath:jdbc.properties"})
public class SpringConfig {
@Value("${jdbc.url}")
private String jdbcUrl;
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
}
}
Spring 引用外部文件
<!--引用外部文件db.properties-->
<context:property-placeholder location="classpath:db.properties"/>
1、 如何配置多个配置文件?
@PropertySource(value= {"classpath:jdbc.properties","xxx"})
2、 如果配置的配置文件不存在会怎么样?
@PropertySource(value= {"classpath:jdbc.properties"},ignoreResourceNotFound = true)
之前的spring.xml
<!-- 定义数据源 -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
destroy-method="close">
<!-- 数据库驱动 -->
<property name="driverClass" value="${jdbc.driverClassName}" />
<!-- 相应驱动的jdbcUrl -->
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- 数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!-- 数据库的密码 -->
<property name="password" value="${jdbc.password}" />
<!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
<property name="idleConnectionTestPeriod" value="60" />
<!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
<property name="idleMaxAge" value="30" />
<!-- 每个分区最大的连接数 -->
<!--
判断依据:请求并发数
-->
<property name="maxConnectionsPerPartition" value="100" />
<!-- 每个分区最小的连接数 -->
<property name="minConnectionsPerPartition" value="5" />
</bean>
参考xml配置改造成java配置方式:
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
@PropertySource(value= {"classpath:db.properties"},ignoreResourceNotFound = true)
public class SpringConfig {
@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 BoneCPDataSource boneCPDataSource(){
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
boneCPDataSource.setJdbcUrl(jdbcUrl);
boneCPDataSource.setDriverClass(jdbcDriverClassName);
boneCPDataSource.setUsername(jdbcUsername);
boneCPDataSource.setPassword(jdbcPassword);
return boneCPDataSource;
}
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
}
}
3.Springboot 快速入门
3.1 设置spring boot的parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
说明:Spring boot的项目必须要将parent设置为spring boot的parent,该parent包含了大量默认的配置,大大简化了我们的开发。
3.2 导入spring boot的web支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.3 导入spring boot的插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
3.4 编写第一个Spring Boot的应用
@Controller
@SpringBootApplication
@Configuration
public class HelloApplication {
@RequestMapping("hello")
@ResponseBody
public String hello(){
return "hello world!";
}
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
代码说明:
1、@SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置。
2、@Configuration:这是一个配置Spring的配置类;
3、@Controller:标明这是一个SpringMVC的Controller控制器;
4、main方法:在main方法中启动一个应用,即:这个应用的入口;
3.5 启动应用.
第一种:
在Spring Boot项目中,启动的方式有两种,一种是直接run Java Application另外一种是通过Spring Boot的Maven插件运行。
第二种:
maven插件spring-boot:run
4.Spring Boot的核心
4.1 入口类和@SpringBootApplication
Spring Boot的项目一般都会有*Application
的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。
@SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解:
该注解主要组合了以下注解:
- @SpringBootConfiguration:这是Spring Boot项目的配置注解,这也是一个组合注解:
在Spring Boot项目中推荐使用@ SpringBootConfiguration替代@Configuration - @EnableAutoConfiguration:启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项:
a) 如:我们添加了spring-boot-starter-web
的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC
- @ComponentScan:默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。
4.2 关闭自动配置
通过上述,我们得知,Spring Boot会根据项目中的jar包依赖,自动做出配置,Spring Boot支持的自动配置如下(非常多):
比如:我们不想自动配置Redis,想手动配置。
@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
4.3.修改全局配置
Spring Boot项目使用一个全局的配置文件application.properties
或者是application.yml
,在resources目录下或者类路径下的/config下,一般我们放到resources下。
1、 修改tomcat的端口为8088
server.port=8088
2、修改进入DispatcherServlet的规则为:*.html
server.port=8088
server.servlet-path=*.html
更多全局配置:
https://www.cnblogs.com/tangge/p/9609165.htmlI
4.4.XML配置文件
4.5.日志
Spring Boot对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置:
#设置日志级别
logging.level.org.springframework=DEBUG
格式
logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`
5.Spring Boot的自动配置的原理
Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器。
5.1. Maven下载源码
通过 dependency:sources 该命令可以下载该项目中所有的依赖的包的源码。
5.2. 源码分析
org.springframework.boot.SpringApplication:
5.3. Spring.factories文件
5.5. 举例:Redis的自动配置
从上述的配置中可以看出,org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
是Redis的自动配置。
5.5. 条件注解
6. Spring Boot的web开发
6.1. 自动配置的ViewResolver
视图的配置mvcProperties对象中:
org.springframework.boot.autoconfigure.web.WebMvcProperties.View
6.2 自动配置静态资源
6.2.1. 进入规则为 /
如果进入SpringMVC的规则为/时,Spring Boot的默认静态资源的路径为:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
# classpath:/META-INF/resources/,
# classpath:/resources/,
# classpath:/static/,
# classpath:/public/
6.2.2. 进入规则为*.xxx 或者 不指定静态文件路径时
5.2.2. 进入规则为*.xxx 或者 不指定静态文件路径时
将静态资源放置到webapp下的static目录中即可通过地址访问:
7.设置事务管理
在Spring Boot中推荐使用@Transactional
注解来申明事务。
首先需要导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager
或JpaTransactionManager
,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。
在Service中添加@Transactional注解: