SpringBoot学习(二)-->Spring的Java配置方式
二、Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。
1、@Configuration 和 @Bean
Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:
1、@Configuration 作用于类上,相当于一个xml配置文件;
2、@Bean 作用于方法上,相当于xml配置中的<bean>;
2、示例
该示例演示了通过Java配置的方式进行配置Spring,并且实现了Spring IOC功能。
工程结构图:

1) 创建工程以及pom.xml文件导入依赖
<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.mmzs.springboot</groupId>
<artifactId>mmzs-springboot</artifactId>
<version>0.0.1-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>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- pom.xml的war报错解决方法 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<span style="white-space:pre;">
</span>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat8-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
pom.xml
2) 编写User对象
package cn.mmzs.springboot.entity; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
public class User { private String uname; private String upassword; private Integer uage; private String email; public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public String getUpassword() {
return upassword;
} public void setUpassword(String upassword) {
this.upassword = upassword;
} public Integer getUage() {
return uage;
} public void setUage(Integer uage) {
this.uage = uage;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} }
User
3) 编写UserDAO用于模拟与数据库的交互
package cn.mmzs.springboot.dao; import java.util.ArrayList;
import java.util.List; import cn.mmzs.springboot.entity.User; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
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.setUname("username_" + i);
user.setUpassword("password_" + i);
user.setUage(i + 1);
user.setEmail("mmzsblog"+i+"@163.com");
result.add(user);
}
return result;
} }
UserDao
4) 编写UserService用于实现User数据操作业务逻辑
package cn.mmzs.springboot.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import cn.mmzs.springboot.dao.UserDao;
import cn.mmzs.springboot.entity.User; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
@Service
public class UserService { @Autowired // 注入Spring容器中的bean对象
private UserDao userDao; public List<User> queryUserList() {
// 调用userDao中的方法进行查询
return this.userDao.queryUserList();
} }
UserService
5) 编写SpringConfig用于实例化Spring容器
package cn.mmzs.springboot.javaconfig; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import cn.mmzs.springboot.dao.UserDao; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.mmzs.springboot") //配置扫描包
public class SpringConfig { @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDao getUserDAO(){
return new UserDao(); // 直接new对象做演示
} }
SpringConfig
注:1、SpringConfig会先扫描cn.mmzs.springboot包,然后在容器内查找被@Configuration声明的类,找到后将这些类按照bean定义进行注册。
2、方法名不建议使用getXxxx的方式,因为使用spring的java配置的时候会默认将方法名作为bean的id。
6) 编写测试方法用于启动Spring容器
package cn.mmzs.springboot.main; import java.util.List; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import cn.mmzs.springboot.entity.User;
import cn.mmzs.springboot.javaconfig.SpringConfig;
import cn.mmzs.springboot.service.UserService; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
public class JavaConfigMain { 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("测试结果:\n"+user.getUname() + ", " + user.getUpassword() + ", "
+ user.getUage() + ", " + user.getEmail());
} // 销毁该容器
context.destroy();
} }
JavaConfigMain
7) 测试效果
测试结果:
username_0, password_0, 1, mmzsblog0@163.com
测试结果:
username_1, password_1, 2, mmzsblog1@163.com
测试结果:
username_2, password_2, 3, mmzsblog2@163.com
测试结果:
username_3, password_3, 4, mmzsblog3@163.com
测试结果:
username_4, password_4, 5, mmzsblog4@163.com
测试结果:
username_5, password_5, 6, mmzsblog5@163.com
测试结果:
username_6, password_6, 7, mmzsblog6@163.com
测试结果:
username_7, password_7, 8, mmzsblog7@163.com
测试结果:
username_8, password_8, 9, mmzsblog8@163.com
测试结果:
username_9, password_9, 10, mmzsblog9@163.com
8) 小结
从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。
Spring对Java配置的支持是由@Configuration注解和@Bean注解来实现的。
由@Bean注解的 方法将会实例化、配置和初始化一个 新对象,这个对象将由Spring的IoC容器来管理。@Bean声明所起到的作用与<bean/> 元素类似。
被 @Configuration所注解的类则表示这个类的主要目的是作为bean定义的资源。被@Configuration声明的类可以通过在同一个类的 内部调用@bean方法来设置嵌入bean的依赖关系。
SpringBoot学习(二)-->Spring的Java配置方式的更多相关文章
- SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池
三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...
- SpringBoot学习(二)——Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 一.@Configuration 和 @Bean Spring的Java配置方式是通过@Configuration和@Bean ...
- Spring 的java 配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1@Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration 和 @ ...
- Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1 @Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration ...
- Spring的Java配置方式—@Configuration和@Bean实现Java配置
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ...
- spring的Java配置入门(Spring Boot学习笔记之一)
spring的Java配置 1.创建maven项目 使用idea创建maven项目,这里顺便提一下,idea真的比eclipse好用,早点熟悉吧.然后就是maven是java项目管理最主流的工具,自己 ...
- 【Java Web开发学习】Spring MVC 开始配置
Spring MVC 开始配置 转载:http://www.cnblogs.com/yangchongxing/p/8871370.htm 学习搭建最简单的Spring MVC框架. ======== ...
- SPRING SECURITY JAVA配置:Web Security
在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...
- SpringBoot学习(一)-->Spring的发展
一.Spring的发展 1.Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xm ...
随机推荐
- Adnroid开发环境搭建(四步搞定)
新手博友,多多关照 下面给大家介绍JDK Eclipse AndroidSDK ADT环境搭建,安装教程 第一步.安装JDK: 第二步.安装Eclipse: 第三步.下载并安装AndroidSDK: ...
- CUDA 计算线程索引的一般公式
CUDA thread index: int blockId = blockIdx.z * (gridDim.x*gridDim.y) + blockIdx.y ...
- 特征选择 (feature_selection)
目录 特征选择 (feature_selection) Filter 1. 移除低方差的特征 (Removing features with low variance) 2. 单变量特征选择 (Uni ...
- SQL Server Integration Services SSIS最佳实践
SQL Server Integration Services Best Practices Tips https://www.mssqltips.com/sql-server-tip-categor ...
- Delegate、Thread、Task、ThreadPool几种方式创建异步任务性能对比
开始预测的结果是 Task>Delegate>ThreadPool>>Thread. (一)测试代码 static async Task<int> AsyncTas ...
- MySQL基础操作1
1.进入MySQL的两种方式: (1).MySQL自带的控制台 直接输入密码 (2).命令提示符: mysql -uroot -proot 然后再输入密码 MySQL常用指令 ------- 1.启动 ...
- Pyhon学习笔记-基础3
文件操作 1.基本操作 f = open("filename","r",encoding="utf-8") #打开文件,以r模式,字符编码模 ...
- 基于Fusioncharts的报表统计
先了解fusioncharts插件,fusioncharts是一款基于XML和flash的报表组件,支持Java.PHP.AngularJS等等开发语言,所以,开发出来,加入swf文件,就可以出现动态 ...
- eclipse运行spark程序时日志颜色为黑色的解决办法
自从开始学习spark计算框架以来,我们老师教的是local模式下用eclipse运行spark程序,然后我在运行spark程序时,发现控制台的日志颜色总是显示为黑色,哇,作为程序猿总有一种强迫症,发 ...
- 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
1.概述 本文来自腾讯视频云终端技术总监rexchang(常青)技术分享,内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebR ...