Spring的发展
1、Spring1.x 时代
在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。
2、Spring2.x时代
随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。最佳实践:
应用的基本配置用xml,比如:数据源、资源文件等;
业务开发用注解,比如:Service中注入bean等;
3、Spring3.x到Spring4.x
从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。
Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:@Configuration 作用于类上,相当于一个xml配置文件;@Bean 作用于方法上,相当于xml配置中的<bean>。
示例
1、该示例演示了通过Java配置的方式进行配置Spring,并且实现了Spring IOC功能。首先创建maven项目并引入依赖。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
</dependencies>
2、创建user对象
public class User {
private String username;
private String password;
private Integer age;
//略去getter,setter和toString方法
}
3、编写UserDAO 用于模拟与数据库的交互
public class UserDAO {
public List<User> queryUserList(){
List<User> result = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setUsername("username_" + i);
user.setPassword("password_" + i);
user.setAge(i + 1);
result.add(user);
}
return result;
}
}
4、 编写SpringConfig 用于实例化Spring容器 ,所有文件都放在cn.tit.springboot.javaconfig包下面
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.tit.springboot.javaconfig") //配置扫描包
public class SpringConfig {
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
}
}
6、编写测试类用于启动容器
public class TestDemo {
public static void main(String[] args) {
// 通过Java配置来实例化Spring容器
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
// 在Spring容器中获取Bean对象
UserDAO userDAO = context.getBean(UserDAO.class);
// 调用对象中的方法
List<User> list = userDAO.queryUserList();
for (User user : list) {
System.out.println(user);
}
// 销毁该容器
context.destroy();
}
}
7、测试效果。从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。
配置数据库连接池
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
<version>0.8.0.RELEASE</version>
</dependency>
jdbc.properties
jdbc.url=127.0.0.1
jdbc.driverClassName= oracle.jdbc.driver.OracleDriver
jdbc.username=admin
jdbc.password=admin
MyJdbcConfig.java
@PropertySource(value = { "classpath:jdbc.properties" }, ignoreResourceNotFound = true)
@Component
public class MyJdbcConfig {
@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 dataSource() {
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
// 数据库驱动
boneCPDataSource.setDriverClass(jdbcDriverClassName);
// 相应驱动的jdbcUrl
boneCPDataSource.setJdbcUrl(jdbcUrl);
// 数据库的用户名
boneCPDataSource.setUsername(jdbcUsername);
// 数据库的密码
boneCPDataSource.setPassword(jdbcPassword);
// 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
// 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
boneCPDataSource.setIdleMaxAgeInMinutes(30);
// 每个分区最大的连接数
boneCPDataSource.setMaxConnectionsPerPartition(100);
// 每个分区最小的连接数
boneCPDataSource.setMinConnectionsPerPartition(5);
return boneCPDataSource;
}
}
测试类
@SpringBootTest
@RunWith(SpringRunner.class)
public class MyTest {
@Autowired
MyJdbcConfig jdbcConfig;
@Test
public void jdbcTest() {
BoneCPDataSource dataSource = jdbcConfig.dataSource();
System.out.println(dataSource);
}
}
这样就通过java文件配置资源库:
Springboot
Spring Boot 是 Spring 的子项目,正如其名字,提供 Spring 的引导( Boot )的功能。通过 Spring Boot ,我们开发者可以快速配置 Spring 项目,引入各种 Spring MVC、Spring Transaction、Spring AOP、MyBatis 等等框架,而无需不断重复编写繁重的 Spring 配置,降低了 Spring 的使用成本。
特点
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成并且对XML也没有配置要求
快速入门
1、新建一个maven项目,引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2、新建一个启动类
@SpringBootApplication
@RestController
public class App {
@RequestMapping("hello")
@ResponseBody
public String hello() {
return "hello world!";
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
3、启动app,访问http://localhost:8080/hello