spring
Posted instinct-em
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring相关的知识,希望对你有一定的参考价值。
Table of Contents
1. 引言
1.1 EJB存在的问题
- 运行环境苛刻
- 代码移植性差
1.2 什么是Spring
Spring是一个轻量级的JavaEE解决方案,整合众多优秀的设计模式。
- 轻量级
- 对于运行环境没有特殊要求
开源: Tomcat resion jetty
收费: weblogic webaphere - 代码移植性高: 不需要实现额外接口
- 对于运行环境没有特殊要求
- JavaEE的解决方案
img1
- 整合设计模式
- 工厂
- 代理
- 模板
- 策略
- 设计模式
- ?义概念:?向对象设计中,解决特定问题的经典代码。
- 狭义概念:GOF4?帮定义的23种设计模式:??、适配器、装饰器、??、代理、模板…
1.3 ??设计模式
概念:通过??类,创建对象;
User user = new User(); UserDAO userDAO = new UserDAOImpl();
- 好处:解耦合
- 耦合:指定是代码间的强关联关系,??的改变会影响到另??;
- 问题:不利于代码维护;
简单:把接?的实现类,硬编码在程序中;
UserService userService = new UserServiceImpl();
1.4 简单工厂的设计
package com.baizhiedu.basic; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BeanFactory { private static Properties env = new Properties(); static{ try { //第一步 获得IO输入流 InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties"); //第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl env.load(inputStream); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } /* 对象的创建方式: 1. 直接调用构造方法 创建对象 UserService userService = new UserServiceImpl(); 2. 通过反射的形式 创建对象 解耦合 Class clazz = Class.forName("com.baizhiedu.basic.UserServiceImpl"); UserService userService = (UserService)clazz.newInstance(); */ public static UserService getUserService() { UserService userService = null; try { //com.baizhiedu.basic.UserServiceImpl Class clazz = Class.forName(env.getProperty("userService")); userService = (UserService) clazz.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return userService; } public static UserDAO getUserDAO(){ UserDAO userDAO = null; try { Class clazz = Class.forName(env.getProperty("userDAO")); userDAO = (UserDAO) clazz.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return userDAO; } }
配置文件 applicationContext.properties:
# Properties 集合 存储 Properties文件的内容 # 特殊Map key=String value=String # Properties [userService = com.baizhiedu.xxx.UserServiceImpl] # Properties.getProperty("userService") userService = com.baizhiedu.basic.UserServiceImpl userDAO = com.baizhiedu.basic.UserDAOImpl
1.5 通用工厂的设计
问题:简单??会存在?量的代码冗余。
img2
通???的代码:
package com.baizhiedu.basic; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BeanFactory { private static Properties env = new Properties(); static{ try { //第一步 获得IO输入流 InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties"); //第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl env.load(inputStream); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } /* key 小配置文件中的key [userDAO,userService] */ public static Object getBean(String key){ Object ret = null; try { Class clazz = Class.forName(env.getProperty(key)); ret = clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } return ret; } }
1.6 通???的使??式
- 定义类型 (类)
- 通过配置?件的配置告知?? applicationContext.properties 中 key = value;
- 通过??获得类的对象 Object ret = BeanFactory.getBean("key");
1.7 总结:
Spring本质: ?? ApplicationContext (applicationContext.xml)
2. 第一个 Spring 程序
使用工具idea
2.1 环境搭建
依赖查询网站:https://mvnrepository.com/;
配置 Spring 的 jar 包:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.4.RELEASE</version> </dependency>
- Spring 的配置文件:
- 配置?件的放置位置:任意位置,没有硬性要求;
- 配置?件的命名 :没有硬性要求,建议: applicationContext.xml ;
- 思考:?后应? Spring 框架时,需要进?配置?件路径的设置。
以上是关于spring的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot:thymeleaf 没有正确渲染片段
What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段
Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]
解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段