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 ...
随机推荐
- WebServices 注解汇总
Web Service 元数据注释 @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值为 Java 类的 ...
- Jquery操作文档标签
1.插入动作 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 重构SP5中声明自定义扩展类为API调用
展的自定义类方法想要被前端异步调用必须在方法中 1.首先类必须继承自 AppService 类 2.方法必须指定特性 [ActionDescription("名称","编 ...
- 2018 python面试题
在开始看面试题时,我觉得我们很有必要去了解一下市场需要什么样的python开发人员: 1.python爬虫工程师(scrapy,xpath,正则,mongdb,redis,http 协议,html) ...
- SQL语言基础学习
9.26.对之前学习的知识进行一下梳理,同时结合所查资料对知识进行一次整合
- RabbitMQ 分发到多Consumer(Publish/Subscribe)
上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...
- [纪录片] 鸟瞰中国 ——China from Above
上周末我看了一部纪录片<鸟瞰中国>,觉得特别有意思,想要分享给你. 制作背景 <鸟瞰中国>是由中国五洲传播中心与美国国家地理频道联合拍摄的纪录片,由KNNY PNG.KLAUS ...
- Javascript高级编程学习笔记(68)—— 事件(12)设备事件
设备事件 随着智能手机与平板电脑的普及,为了更好地让用户与这些设备进行交互 浏览器引入了一种新的方式,而一类新的事件也应运而生,这就是设备事件 W3C从2011年开始制定关于设备事件的草案 下面将会介 ...
- PHP判断访问系统的用户设备类型
当今的电子设备越来越多,我们在开发过程中往往也需要分析用户使用的电子设备类型.下面是采用PHP代码来获取用户使用的哪些类型的电子设备来访问自己的平台. /** * 用户设备类型 * @return s ...
- PHP实现大文件下载
实现大文件下载的关键在于循环读取字节流 function downloadFile($filename) { //获取文件的扩展名 $allowDownExt = array ( 'rar', 'zi ...