1. Развитие весны
1.1 Эпоха Spring1.x
В эпоху Spring 1.x bean-компоненты настраивались через xml-файлы.В связи с постоянным расширением проекта конфигурацию xml необходимо распределять по разным файлам конфигурации, и необходимо часто переключаться между классами java и файлами конфигурации xml.
1.2.Эра Spring2.x
Благодаря поддержке аннотаций, появившейся в JDK 1.5, Spring 2.x может использовать аннотации для объявления и внедрения bean-компонентов, что значительно уменьшает файл конфигурации xml и значительно упрощает разработку проекта.
Итак, вопрос в том, должны ли мы использовать xml или аннотации?
Лучшие практики:
1. Используйте xml для базовой конфигурации приложения, такой как источники данных, файлы ресурсов и т. д.;
2. Аннотации для развития бизнеса, такие как: внедрение бинов в Сервис;
1.3. с Spring3.x на Spring4.x
Начиная с Spring3.x, был предоставлен метод конфигурации Java.Использование метода конфигурации Java позволяет лучше понять, какие компоненты вы настраиваете.Сейчас мы живем в эту эру, и как Spring4.x, так и Spring boot рекомендуют использовать метод конфигурации Java.
2. Метод конфигурации Java Spring
Конфигурация Java является рекомендуемым методом конфигурации для Spring 4.x, который может полностью заменить конфигурацию xml.
2.1 @Конфигурация и @Бин
Метод конфигурации Java Spring - через @Configuration и @Bean реализованы эти две аннотации:
1. @Configuration действует на класс, который эквивалентен файлу конфигурации xml;
2. @Bean действует на метод, эквивалентный
2.2 Примеры
* Этот пример демонстрирует настройку Spring через конфигурацию Java и реализует функцию Spring IOC.
Создайте проект и импортируйте зависимости
<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>
Напишите объект пользователя
public class User {
private String username;
private String password;
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
Напишите 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;
}
}
Напишите 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对象做演示
}
}
Напишите тестовый метод для запуска контейнера Spring.
public class Main {
public static void main(String[] args) { // 通过Java配置来实例化Spring容器
AnnotationConfigApplicationContext context = new
AnnotationConfigApplicationContext(SpringConfig.class); // 在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(); }
}
Тестовый эффект
резюме
Как видно из приведенного выше примера, использование Java-кода является прекрасной заменой конфигурационного файла xml, а структура более понятна.
3. Чтение файлов конфигурации внешних ресурсов
Вы можете указать файл конфигурации для чтения через @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对象做演示
}
}
думать:
1. Как настроить несколько файлов конфигурации?
2. Что делать, если сконфигурированный файл конфигурации не существует?
Настроить пул соединений с базой данных
Импорт зависимостей:
<!-- 连接池 -->
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
<version>0.8.0.RELEASE</version>
</dependency>
Предыдущая конфигурация 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:
@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;
}
4. Весна Ботинок
Что такое Spring Boot?
Весна
Преимущества и недостатки загрузки
5. Весенний ботинок
Установите родителя весенней загрузки
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
Примечание. Проект загрузки Spring должен установить родительский элемент Spring Boot, который содержит большое количество конфигураций по умолчанию, что значительно упрощает нашу разработку.
Импорт веб-поддержки весенней загрузки
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Добавить загрузочный плагин Spring
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
Напишите свое первое приложение 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;
4. Основной метод: запуск приложения в основном методе, то есть: запись этого приложения;
Запустите приложение (для eclipse)
В проекте Spring Boot есть два способа запуска: один — запустить Java-приложение напрямую, а другой — запустить через плагин Spring Boot Maven.
Первый:
Секунда:
Стартовый эффект:
Если вы видите следующую информацию, запуск прошел успешно:
INFO 6188 --- [ main] c.i.springboot.demo.HelloApplication : Started HelloApplication in 3.281 seconds (JVM running for 3.601)
тестовое задание
Эффект:
Добро пожаловать, чтобы добавить, спасибо за сотрудничество! ! !