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 ...
随机推荐
- 启动eclipse could not create the java Vittual Machine
查询并几种方法: 1.都说是 eclipse.ini 环境初始文件的内存问题,续增大堆内存大小,具体配置如,如果找不到问题所在可以试试(该方法是确定环境变量没问题下试行) -Xms64m-Xmx25 ...
- STM32CubeMX的串口配置,以及驱动代码
1.STM32CubeMX的配置没啥子好说的,使能然后改一下波特率和字长,然后在将中断勾选,把中断等级调到1(一定要比systick的优先级垃圾!!!) 2.驱动代码 在生成的it.c文件中,例如用的 ...
- <笔记>TP5的save方法返回值
用save方法来更新数据时,若更新前后数据没有改变则返回0,更新成功返回影响行数,更新失败返回false 若想要数据没改变时提示修改成功,则需要严格判断 if(结果!==false){提示成功}而不是 ...
- homekit2mqtt on DietPi
Followed official install instruction and got: dns_sd.DNSServiceRegister(self.serviceRef, flags, ifa ...
- OC基础成员变量、属性变量、实例方法与类方法
首先,为什么我们要定义一个新类呢?按照我的理解,就是为了抽象出来一个新的东西(也就是类),用来存储更多的数据变量和方法,一切类都直接或间接继承与NSObject. 在类的头文件里我们可以定义成员变量. ...
- JAVA的 IO NIO AIO笔记
IO linux内核将所有外部设备都看做一个文件来操作,对一个文件的读写会调用内核系统命令,放回一个file descriptor(文件描述符), 对一个socket的读写也会有相应 ...
- jdk环境变量的设置
一.jdk下载网址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二.环境变 ...
- 隔壁小孩都要知道的Drupal配置
i春秋作家:Arizona 原文来自:隔壁小孩都要知道的Drupal配置 隔壁小孩都要知道的Drupal配置 Drupal是一个开源的PHP内容管理系统,具有相当复杂的架构.它还具有强大的安全模型.感 ...
- Java常用的经典排序算法:冒泡排序与选择排序
一.冒泡排序 冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为 ...
- Kali学习笔记28:Burpsuite(下)
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 扫描: 上一篇介绍到了爬网,那么到这里我以及爬取了一个 ...