Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。

一、@Configuration 和 @Bean

  Spring的Java配置方式是通过@Configuration和@Bean这两个注解实现的:

  1、@Configuration作用于类上,相当于一个xml配置文件;

  2、@Bean作用于方法上,相当于xml配置中的<bean>;

二、示例

  该示例演示了通过Java配置的方式进行配置spring,并且实现了Spring ICO功能。

  项目示例目录结构如下:

  

1、创建工程以及导入依赖

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast.springboot</groupId>
<artifactId>itcast-springboot</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>itcast-springboot Maven Webapp</name>
<url>http://maven.apache.org</url> <dependencies> <!-- spring包 -->
<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> <!-- Junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</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>

2、编写User对象

package cn.itcast.springboot.bean;
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;
} }

3、编写UserDAO用于模拟与数据库的交互

package cn.itcast.springboot.dao;

import java.util.ArrayList;
import java.util.List; import cn.itcast.springboot.bean.User; 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、编写UserService用于实现User数据操作业务逻辑

package cn.itcast.springboot.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import cn.itcast.springboot.bean.User;
import cn.itcast.springboot.dao.UserDAO; @Service
public class UserService { @Autowired // 注入Spring容器中的bean对象
private UserDAO userDAO; public List<User> queryUserList() {
// 调用userDAO中的方法进行查询
return this.userDAO.queryUserList();
} }

5、编写SpringConfig用于实例化Spring容器(重点)

package cn.itcast.springboot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import cn.itcast.springboot.dao.UserDAO; @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.service") //配置扫描包(注意必须是业务层包)
public class SpringConfig { @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
} }

6、编写测试方法用于启动Spring容器

package cn.itcast.springboot.test;

import java.util.List;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import cn.itcast.springboot.bean.User;
import cn.itcast.springboot.config.SpringConfig;
import cn.itcast.springboot.service.UserService; 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();
} }

7、测试效果

8、小结

  从以上示例中可以看出,使用Java代码就可以完美的替换xml配置文件,并且结构更加的清晰

三、实战

1、读取外部的资源配置文件

  @PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法:

package cn.itcast.springboot.config;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; import com.jolbox.bonecp.BoneCPDataSource; import cn.itcast.springboot.dao.UserDAO; @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.service") //配置扫描包(注意必须是业务层包)
@PropertySource(value= {"classpath:jdbc.properties"})
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; //DataSource对象
@Bean(destroyMethod="close")
public DataSource 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;
} @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
}
}

思考:

  1、如何配置多个配置文件?

  2、如果配置的配置文件不存在会怎样?

  可以设置属性ignoreResourceNotFound的值。

  ignore-resource-not-found:如果属性文件找不到,是否忽略,默认false,即不忽略,找不到文件并不会抛出异常。

  例如这里设置其值为false或者不设置,则会抛出以下异常

2、配置数据库连接池

 

SpringBoot学习(二)——Spring的Java配置方式的更多相关文章

  1. SpringBoot学习(二)-->Spring的Java配置方式

    二.Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @Bean Spring的Java配置方式是通过 @ ...

  2. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

  3. Spring 的java 配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1@Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration 和 @ ...

  4. Spring的Java配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1     @Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration ...

  5. Spring的Java配置方式—@Configuration和@Bean实现Java配置

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ...

  6. spring的Java配置入门(Spring Boot学习笔记之一)

    spring的Java配置 1.创建maven项目 使用idea创建maven项目,这里顺便提一下,idea真的比eclipse好用,早点熟悉吧.然后就是maven是java项目管理最主流的工具,自己 ...

  7. 【Java Web开发学习】Spring MVC 开始配置

    Spring MVC 开始配置 转载:http://www.cnblogs.com/yangchongxing/p/8871370.htm 学习搭建最简单的Spring MVC框架. ======== ...

  8. SPRING SECURITY JAVA配置:Web Security

    在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...

  9. SpringBoot学习(一)-->Spring的发展

    一.Spring的发展 1.Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xm ...

随机推荐

  1. 用mysql workbench导出mysql数据库关系图

    用mysql workbench导出mysql数据库关系图 1. 打开mysql workbench,选择首页中间"Data Modeling"下方的第二栏"Create ...

  2. JPA Annotation注解

    JPA & Hibernate 注解 先说说JPA和Hibernate的关系 JPA(Java Persistence API),是Java EE 5的标准ORM接口,也是ejb3规范的一部分 ...

  3. [leed code 179] Largest Number

    1 题目 Given a list of non negative integers, arrange them such that they form the largest number. For ...

  4. Convolution Neural Network (CNN) 原理与实现

    本文结合Deep learning的一个应用,Convolution Neural Network 进行一些基本应用,参考Lecun的Document 0.1进行部分拓展,与结果展示(in pytho ...

  5. MGW PCI Framework Architecture

    MGW执行SWBT/FT cases是主要是利用Ant项目. Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linu ...

  6. API网关【gateway 】- 1

    最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析. 网关的单节点场景: 网关的多节点场景: 这里的多节点是根据模块进 ...

  7. nginx-2.nginx是什么

    Nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器: Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以 ...

  8. spring cloud学习(四) 动态路由

    Zuul的主要功能是路由和过滤器.路由功能是微服务的一部分,zuul实现了负载均衡. 1.1 新建模块zuul pom.xml <?xml version="1.0" enc ...

  9. 【sping揭秘】12、SpringAOP的实现机制

    SpringAOP的实现机制 设计模式代理模式 参考我之前的代理模式 http://www.cnblogs.com/cutter-point/p/5226642.html 这里写个简单的案例 pack ...

  10. POJ 2610

    #include<iostream> #include<iomanip> using namespace std; int main() { //freopen("a ...