LOGO
文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料!
传统Web开发存在硬编码所造成的过度程序耦合(例如:Service中作为属性Dao对象) 部分Java EE API较为复杂,使用效率低(例如:JDBC开发步骤) 侵入性强,移植性差(例如:DAO实现的更换,从Connection到SqlSession)
Spring 是一个开源的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 Spring是众多优秀设计模式的组合(工厂、单例、代理、适配器、包装器、观察者、模板、策略) Spring并未替代现有框架产品,而是将众多框架进行有机整合,简化企业级开发,俗称"胶水框架"
官方网站:https://spring.io/ GitHub:https://github.com/spring-projects 下载地址:http://repo.spring.io/release/org/springframework/spring/
官方网站:https://spring.io/
GitHub:https://github.com/spring-projects
下载地址:http://repo.spring.io/release/org/springframework/spring/
Spring架构由诸多模块组成,可分类为 核心技术: 依赖注入 ,事件,资源,i18n,验证,数据绑定,类型转换,SpEL, AOP 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问: 事务 ,DAO支持,JDBC,ORM,封装XML。 Spring MVC和 Spring WebFlux Web框架。 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。 语言:Kotlin,Groovy,动态语言。
Spring架构由诸多模块组成,可分类为
编写一个读取Spring配置文件并创建对象的工厂,了解Spring工厂创建对象的流程,以便使用自定义工厂来测试Spring基本开发流程
package com.mylifes1110.factory; import java.io.IOException; import java.util.Properties; /** * @ClassName MyFactory * @Description 自定义工厂(创建对象) * @Author Ziph * @Date 2020/7/12 * @Since 1.8 * @Version 1.0 */ public class MyFactory { private Properties properties = new Properties(); public MyFactory() { } public MyFactory(String config) throws IOException { // 加载配置文件 properties.load(MyFactory.class.getResourceAsStream(config)); } // 获取对象 public Object getBean(String beanName) throws ClassNotFoundException, IllegalAccessException, InstantiationException { String classPath = properties.getProperty(beanName); if (classPath != null) { Class clazz = null; clazz = Class.forName(classPath); return clazz.newInstance(); } return null; } }
>
如果对Maven不了解的小伙伴可以参考Maven教程
在pom.xml文件中引入Spring常用依赖
<dependencies> <!-- Spring常用依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.6.RELEASE</version> </dependency> </dependencies>
在resources文件夹中创建一个名为spring- context.xml,命名并无规定,还有其他的常用命名,比如:applicationContext.xml、beans.xml
spring- context.xml
applicationContext.xml
beans.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"> </beans>
定义一个Bean对象、生产该对象并测试该对象内的方法(UserDaoImpl)
package com.mylifes1110.dao.impl; import com.mylifes1110.bean.User; import com.mylifes1110.dao.UserDao; public class UserDaoImpl implements UserDao { @Override public int insertUser(User user) { System.out.println("------insertUser and UserDao------"); return 0; } }
依赖注入在这里可以把它理解为将要生产的对象注入到Spring容器中,也就是在spring- context.xml文件利用标签注入,这样就可以让Spring知道你要生产的对象是谁 标签:
依赖注入在这里可以把它理解为将要生产的对象注入到Spring容器中,也就是在spring- context.xml文件利用标签注入,这样就可以让Spring知道你要生产的对象是谁
标签:
<?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"> <bean id="UserDao" class="com.mylifes1110.dao.impl.UserDaoImpl"/> </beans>
调用Spring工厂API接口ApplicationContext读取配置Spring核心配置文件并创建工厂对象
package com.mylifes1110.dao; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class UserDaoImplTest { /** * @MethodName insertUser * @Param [] * @Description 测试使用Spring工厂获取对象 * @Author Ziph * @Date 2020/7/12 */ @Test public void insertUser() { // 读取配置文件所需创建对象中所需创建的bean对象并获取spring工厂对象 ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml"); // 通过注入时的唯一标识(id)获取bean对象 UserDao userDao = (UserDao) context.getBean("UserDao"); // 使用对象 userDao.insertUser(null); // 输出结果为:------insertUser and UserDao------ } }
Spring框架包含多个模块,每个模块各司其职,可结合需求引入相关依赖Jar包实现功能。 注意: Jar包彼此存在依赖,只需引入最外层Jar即可由Maven自动将相关依赖Jar引入到项目中。
Spring框架包含多个模块,每个模块各司其职,可结合需求引入相关依赖Jar包实现功能。
注意: Jar包彼此存在依赖,只需引入最外层Jar即可由Maven自动将相关依赖Jar引入到项目中。
配置文件中的顶级标签中包含了语义化标签的相关信息(spring-context.xml头文件即是schema) 注意: Spring需要导入的schema标签是很有规律的,因为Spring是特别规范的。例如:如下context别名的schema标签是我自己复制修改的,它也是我们所用到Spring的schema,你可以复制beans的schema来替换所有beans的关键字即可,但是记得复制全(注意查看三个有context标志标签语句,另外“ : ”后面的是别名哦)
配置文件中的顶级标签中包含了语义化标签的相关信息(spring-context.xml头文件即是schema)
注意: Spring需要导入的schema标签是很有规律的,因为Spring是特别规范的。例如:如下context别名的schema标签是我自己复制修改的,它也是我们所用到Spring的schema,你可以复制beans的schema来替换所有beans的关键字即可,但是记得复制全(注意查看三个有context标志标签语句,另外“ : ”后面的是别名哦)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/beans/spring-context.xsd"> </beans>
原文链接:https://www.cnblogs.com/ziph/p/13291473.html