一.MVC思想M:Model 数据模型(javaBean实体类)

V:View 视图(前端jsp,html等等)

C:Controller 控制层(处理业务逻辑)

二.高级框架介绍Dao层: MyBatis,Hibernate,Spring Data jpa

Bean管理: Spring

Controller层: SpringMVC

微服务:Dubbo,SpringCloud

三.spring的核心

IOC:控制反转

DI:依赖注入

AOP:面向切面

四.环境搭建1.创建maven项目

2.添加项目依赖

3.添加配置文件

4.编写测试代码

5.运行单元测试

五.IOC容器---控制反转

5.1.手写IOC容器知识点:

xml解析(dom4j+xPath)

反射

集合(list,map)

步骤:

1.在pom.xml中添加dom4j和xPath的依赖

dom4j

dom4j

1.6.1

jaxen

jaxen

1.1.6

2.创建资源文件resoures

新建xxxx.xml文件

新建bean,里面只有id,class

public class SxtBean {

private String id;

private String clazz;

public SxtBean(String id, String clazz) {

this.id = id;

this.clazz = clazz;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getClazz() {

return clazz;

}

public void setClazz(String clazz) {

this.clazz = clazz;

}

@Override

public String toString() {

return "SxtBean{" +

"id='" + id + '\'' +

", clazz='" + clazz + '\'' +

'}';

}

}

3.在java中新建ApplicationContext接口

package com.shsxt.ioc;

/** 接口*** 手写IOC容器*/

public interface ApplicationContext {

//抽象方法 public Object getBean(String id);

}

4.在java中新建xxApplicationContext普通类实现接口

public class ShsxtApplicationContext implements ApplicationContext {

//xml配置文件路径 private String xmlPath;

// 存储解析结果 private List sxtBeans = new ArrayList<>();

//容器来存放反射生成的实例 private Map beanMap=new HashMap<>();

/** 4.1.解析xml* 4.2.存放bean* 4.3.通过Map映射key与实例的关系** @param id* @return*/

//构造器快捷键 alt+insert //带参构造,用来传递xml文件路径 public ShsxtApplicationContext(String xmlPath) {

this.xmlPath = xmlPath;

//1.解析xml parseXml(xmlPath);

// 3.反射生成bean initBeans();

}

//重写方法 @Override

public Object getBean(String id) {

return beanMap.get(id);

}

}

4.1解析xml文件

4.2将解析出来的结果添加到集合

/*** 解析xml* @param xmlPath*/

private void parseXml(String xmlPath) {

if(null==xmlPath || "".equals(xmlPath)){

System.err.println("文件不存在");

}else {

// 读取xml文件 SAXReader reader = new SAXReader();

URL url = this.getClass().getClassLoader().getResource(xmlPath);

try {

Document document = reader.read(url);

//获取节点 List list = document.selectNodes("/beans/bean");

for(Element e : list){

String id = e.attributeValue("id");

String clazz = e.attributeValue("class");

//System.out.println(id + ": "+clazz); // 添加到集合 sxtBeans.add(new SxtBean(id, clazz));

}

} catch (DocumentException e) {

e.printStackTrace();

}

}

}

4.3反射生成bean并添加到map容器中

/*** 反射生成bean*/

private void initBeans() throws ClassNotFoundException, IllegalAccessException, InstantiationException {

if(sxtBeans.size()>0){

for(SxtBean s : sxtBeans){

String id = s.getId();

String clazz = s.getClazz();

beans.put(id,Class.forName(clazz).newInstance());

}

}

}

5.新建单元测试类,测试代码(快捷键 alt+enter)

public class SxtApplicationContextTest {

@Test

public void test01() throws IllegalAccessException, ClassNotFoundException, InstantiationException {

ApplicationContext context = new SxtApplicationContext("spring.xml");

HelloService helloService = (HelloService) context.getBean("helloService");

helloService.hello();

}

}

六.IOC实例化bean的三种方式

1.通过空构造(默认)

一般使用这种形式,只需配置bean标间,必须保证空构造

2.通过静态工厂

bean初始化

3.通过实例化工厂

使用场景:框架整合

七.DI 依赖注入

所注入的属性,必须存在setter方法

1.注入的方式:set注入(默认):必须存在setter方法----掌握

构造器注入:必须存在构造器------掌握

静态工厂注入(了解)

实例化工厂注入(了解)

2.p标签和c标签

用来简化注入的配置

八.Bean自动扫描

1.@controller-----control层,servlet层

2.@Service-----service层

3.@Repository-----dao层

4.@Component-----不明确的层(不属于上面三种)

九.依赖注入注解

1.Autowired----通过类型来匹配(跟id无关)

由spring提供,默认通过类型匹配

2.@Resource(name="id")

由jdk提供,默认通过name(id)匹配,如果name为空,则通过类型匹配

后面不带属性,默认name为空

十.bean作用域

1.单例和prototype(原型)

默认单例,每次返回的对象是同一个对象;自带单例验证方法

非单例设置:xml中配置scope="prototype"每次返回新对象

2.懒加载(lazy-init)

默认非懒加载

十一.bean 的生命周期

1.bean的定义:定义bean标签

2.bean的初始化:通过init-method="init"来监听bean的初始化操作

3.bean的使用

4.bean 的销毁(需要通过抽象容器的destroy方法销毁)

java spring框架怎么学_JAVA学习之路~spring框架(一)相关推荐

  1. JavaWeb学习之路——SSM框架之Spring(五)

    前情提要请看JavaWeb学习之路--SSM框架之Spring(四)                                         整合Spring和Mybatis框架 1.在项目的 ...

  2. JavaWeb学习之路——SSM框架之SpringMVC(八)

    SpringMVC参数传递:把内容写到方法(HandlerMethod)参数中,SpringMVC只要有这个内容,则会注入,在这里使用注解的方式来传递参数 前提使用springmvc注解功能,相应配置 ...

  3. JavaWeb学习之路——SSM框架之Mybatis(三)

    数据库配置和相关类创建看上篇:JavaWeb学习之路--SSM框架之Mybatis(二) https://blog.csdn.net/kuishao1314aa/article/details/832 ...

  4. java 知识积累_java学习知识积累-spring常用注解

    java学习知识积累-spring常用注解 类的分层注解,由于我们后台开发都是分为三层进行开发的,所以Spring框架提供了三种对于不同层的注解方式: 控制层:@Controller 服务层:@Ser ...

  5. java程序员必学_Java入门基础学习,成为一个Java程序员的必备知识

    引言 众所周知,Java是一种面向对象的编程语言.您可以在Windows操作系统上编写Java源代码,而在Linux操作系统上运行编译后的字节码,而无需修改源代码. 数据类型 Java 有 2 种数据 ...

  6. JavaWeb学习之路——SSM框架之Spring(四)

    SSM框架学习-Spring01 1,.Spring介绍 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同 ...

  7. java rmi 是否 必要_Java学习之路-RMI学习

    Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远 ...

  8. 调用java显示有何风险_Java学习----有风险的代码(异常)

    Exception继承了Throwable,但是它本身是有异常类的父类. RuntimeException:运行时异常 Exception->RuntimeException->NullP ...

  9. java开发五大原则_Java学习之路-五大基本原则

    Java学习之路-五大基本原则 Java学习之路-五大基本原则 转载:https://github.com/hollischuang/toBeTopJavaer/blob/master/basics/ ...

最新文章

  1. PHP PDO 连接SQLSErver,PHP 使用 PDO 方式连接 sqlserver ,拼接 的 sql 命令总是报错
  2. java枚举变量反解析用法
  3. Django(part39)--制作图书管理系统
  4. ASP.net 2.0 自定义控件的开发之数据分页 第五章
  5. MariaDB 10之并行复制--延迟测试结果
  6. 设置c++程序的堆栈空间解决栈溢出问题
  7. 3.6 SQL Server 内存
  8. TouchPanel--Qcom DRM休眠唤醒通知链的注册及回调流程
  9. PHP家庭账单系统,家庭财务管理系统1.0【PHP版】
  10. linux常用命令(2)关机重启 文本编辑器 系统管理 软件安装
  11. java中ArrayList小案例(快敲20遍++)
  12. 43.Django04
  13. 论文笔记——Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
  14. 做短视频必须要知道的几个视频设置参数,爆款必备。
  15. 关于10的勾股数有哪些_股票投资收益分析包括哪些方面
  16. 重磅!L4级自动驾驶硬件方案来啦!
  17. 2019年河南省ACM大学生程序设计竞赛原题
  18. 7 士兵排队---PTA(排序+中位数)(C++)
  19. 数据结构-二路归并及归并排序
  20. 360PC权重 怎样查询网站的360PC权重

热门文章

  1. 服务器运行jupyter notebook,解决办法
  2. keras神经网络模型的保存与加载
  3. cmd批处理命令与变量(下)
  4. 旷视 CVPR 2021 论文解读直播来喽!
  5. 阿里云机器学习PAI构建AI集团军作战,联手Intel在AI软硬件领域发力
  6. 直播 | WWW 2021论文解读:强化学习与互信息驱动的子图神经网络
  7. 零基础入门人工智能有门槛吗?学会这些就够了
  8. CVPR 2020最新热点:物体位姿估计
  9. BN究竟起了什么作用?一个闭门造车的分析
  10. 直播预告:GAN在网络特征学习中的应用 | PhD Talk #23