Spring Framework 5.0:入手Spring、IoC容器、用户数据验证案列
来源:互联网 发布:守望先锋官网数据查询 编辑:程序博客网 时间:2024/06/05 08:44
spring是什么?
很多人听到spring,就里面想到做网站。实际上,做网站只是spring框架其中的一个小功能而已。
Spring Framework官网介绍:
https://projects.spring.io/spring-framework/#quick-start
注意:JDK 8+ for Spring Framework 5.x
使用maven下载:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.0.RELEASE</version> </dependency></dependencies>
文档地址:
https://docs.spring.io/spring/docs/5.0.1.BUILD-SNAPSHOT/spring-framework-reference/
参考文献分为几个部分:Core、Testing、Data Access、Web Servlet、Web Reactive、Integration、Kotlin
Ioc容器 是什么?
今天我们要学习核心包Core里的IoC container
。
Inversion of Control (IoC):控制反转,本身是一种模式、设计思想,也并不是Spring特有的。
我们可以简单的理解:用容器来控制 对象的生命周期和相互直接的关系,而不是通过硬编码写在程序里。对象控制权交给独立第三方,而不是通过new Xoo()
。
要理解 IoC容器 的概念,必须结合案列
用户注册验证:1、用户名必须4位;2、QQ必填。
一段时候之后需求变了:1、用户名必须6位;2、QQ可以不填。
需求又变了:1、用户名必须8位;2、QQ必须填。
^^^^^^^^^多么蛋疼啊^^^^^^^^_^
对于这种情况,我们一般会创建:
1、一个验证配置类,比如叫做UserValidateConfig
2、一个操作类,比如叫做UserService
我们用代码演示一下
UserValidateConfig.java:
public class UserValidateConfig { private int UserNameLength; //用户名的长度 private boolean QQRequired; //QQ是否必填 public int getUserNameLength() { return UserNameLength; } public void setUserNameLength(int userNameLength) { UserNameLength = userNameLength; } public boolean isQQRequired() { return QQRequired; } public void setQQRequired(boolean QQRequired) { this.QQRequired = QQRequired; }}
UserService.java:
public class UserService { UserValidateConfig userValidateConfig; public UserValidateConfig getUserValidateConfig() { return userValidateConfig; } public void setUserValidateConfig(UserValidateConfig userValidateConfig) { this.userValidateConfig = userValidateConfig; } public void userLogin(String user_name, String qq) throws Exception { if (user_name.length() < this.userValidateConfig.getUserNameLength()){ throw new Exception("用户名长度不合法"); } if (this.userValidateConfig.isQQRequired() && qq.trim().equals("")){ throw new Exception("qq必填"); } // System.out.println("用户开始登录..."); }}
最后在入口函数测试上2个类:
public static void main(String[] args) throws Exception{ UserService userService = new UserService(); // 用户注册验证 UserValidateConfig userValidateConfig = new UserValidateConfig(); userValidateConfig.setUserNameLength(8); userValidateConfig.setQQRequired(true); // 用户登录操作 配置验证 userService.setUserValidateConfig(userValidateConfig); // 准备登录 userService.userLogin("zhangSan","111111111"); }
这样当我们UserValidateConfig
类发生变化,依赖它的UserService
类也会发生变化。
前提提到的『用户注册』需求的变化,我们就可以只修改UserValidateConfig类。
Spring 框架中有什么高级用法
Spring中配置文件的创建参考文档:
https://docs.spring.io/spring/docs/5.0.1.BUILD-SNAPSHOT/spring-framework-reference/core.html#beans-factory-xml-import
我们在项目resource
目录下创建一个叫做userConfig.xml
的文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- services --> <bean id="user_config" class="SpringLean.UserValidateConfig"> <property name="UserNameLength" value="6"/> <property name="QQRequired" value="true"/> <!-- additional collaborators and configuration for this bean go here --> </bean></beans>
看上面xml文档,好像我们是要把2个验证属性配置上了。
那么怎么使用到上面配置文件呢?
// create and configure beans ApplicationContext context = new ClassPathXmlApplicationContext("userConfig.xml"); UserValidateConfig userValidateConfig = (UserValidateConfig)context.getBean("user_config"); System.out.println(userValidateConfig.getUserNameLength()); // 打印:6 System.out.println(userValidateConfig.isQQRequired()); // 打印:true
打印的值和我们userConfig.xml
这个配置文件里定义的一致呢。
比较2种 方式的差别
我们把需要对UserNameLength
和QQRequired
这2个属性的只,写到了userConfig.xml
这个配置文件中。
这样就避免了像第一种方法那样new:
// UserValidateConfig userValidateConfig = new UserValidateConfig();// userValidateConfig.setUserNameLength(8);// userValidateConfig.setQQRequired(true);
这个userConfig.xml
就可以理解为Spring中的IoC容器
。
不仅如此,我们还可以配置UserService
和UserValidateConfig
的依赖关系:
<bean id="user_config" class="SpringLean.UserValidateConfig"> <property name="UserNameLength" value="6"/> <property name="QQRequired" value="true"/> <!-- additional collaborators and configuration for this bean go here --> </bean> <bean id="user_service" class="SpringLean.UserService"> <property name="userValidateConfig" ref="user_config"/> </bean>
从代码可以看出:id为user_service
的依赖于id为user_config
的。
用户登录验证代码就可以简化为如下:
ApplicationContext context = new ClassPathXmlApplicationContext("userConfig.xml"); // 从配置文件中设置好了相关验证 UserService userService = (UserService)context.getBean("user_service"); userService.userLogin("zhangSan","111111111");
如果没有感受到其中的魅力,不妨再来看看最初的方法:
UserService userService = new UserService(); // 用户注册验证 UserValidateConfig userValidateConfig = new UserValidateConfig(); userValidateConfig.setUserNameLength(8); userValidateConfig.setQQRequired(true); // 用户登录操作 配置验证 userService.setUserValidateConfig(userValidateConfig); // 准备登录 userService.userLogin("zhangSan","111111111");
很显然,需求再发现变化,我们都不需要改动代码,只修改配置文件即可。
- Spring Framework 5.0:入手Spring、IoC容器、用户数据验证案列
- Spring Framework,ioc容器(转)
- Spring framework(3):IoC(1) IoC 容器&上下文对象
- Spring Framework源码(三):IOC容器配置文件加载
- Spring Framework源码(四):IOC容器初始化
- Spring Framework之IOC容器的扩展点(TODO)
- Spring Framework的核心:IOC容器的实现
- Spring反转容器IOC
- spring的Ioc容器
- Spring-- IOC容器详解
- Spring IOC 容器说明
- Spring IoC容器小结
- Spring--IoC容器
- Spring IoC 容器概述
- Spring的IoC容器
- Spring IOC 容器
- Spring之IoC容器
- Spring--IOC容器详解
- ArrayList深度透析
- webserver技术总结之一:webserver概念
- linux中用socket双向传输声音
- 盒子模型之商品分类列表页面
- 2、C++程序中调用Lua函数
- Spring Framework 5.0:入手Spring、IoC容器、用户数据验证案列
- 1758:二叉树
- linux内核编程
- 哈希表的应用之1:用哈希法统计大数据词频
- 【HDU】【3143】【dijkstra】【图上dp】【Speedy Escape】
- Java之DateFormatUtils格式化时间Bug-yellowcong
- Calendar日期的使用
- moosefs调优小记(转)
- MFC界面风格与操作系统一致