day035

runapp启动类 文件 在项目文件中 必须和 controller文件夹和pojo文件夹 同级

400异常:参数类型不匹配 转换失败

500异常:IDEA语法异常

404异常:访问不存在的资源

public class Test1 {
//测试IOC(创建类+配置类)
//单元测试方法:@Test void public 没有参数
@Test
public void test1method(){
//1.读取配置文件—参数是配置文件的路径
ClassPathXmlApplicationContext spring = new ClassPathXmlApplicationContext(“spring-config.xml”);//加载resource目录下的指定配置文件,读到这里配置文件被spring解析产生对象,
//2.如果第一步成功创建好了对象,这里获取spring创建好的对象----参数是配置文件里bean标签的ID值
Object o = spring.getBean(“hello”);//spring认为万物皆是bean, ctrl鼠标移上去查看文档注释
System.out.println(o);//输出hello类的对象地址值, 输出前的日志可以发现spring何时读取配置文件创建对象 ↓
//当读到bean标签时,spring会去创建对象,根据id调用,成功

    /*练习2*/
    Object o1 = spring.getBean("eat");
    System.out.println(o1);

}

}
/*

  • Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4f9a3314 //加载classpath工具类
  • Loaded 1 bean definitions from class path resource [spring-config.xml] //读取一个bean标签
  • Creating shared instance of singleton bean ‘hello’ //创建了单例(唯一)的实例
  • */
    //单例设计模式最大的好处是不需要自己去new 省去了new耗费的内存空间 和 创建对象的时间
    //这也是spring框架默认的创建对象的方式

/*
配置文件中

  • spring认为万物皆是bean,配置bean的位置,spring自动完成ioc

  • class属性用来描述类的全路径,id属性用来作为bean的唯一标识

  • scope=“prototype”用来设置对象是多例,默认是singleton单例的

  • IOC是map<id 的值,类的对象>{“hello”,new Hello()}

  • {“hello”,Class.forName(“cn.tedu.spring.Hello”).newInstance()} ← IOC的本质
    底层用了JAVA的反射

  • */

<?xml version="1.0" encoding="UTF-8"?>

<bean class="spring.hello" id="hello"></bean><!--class="类的全路径(包名+类名)"-->
<bean class="spring.eat" id="eat"></bean>

package spring;

/**

  • @author TangShengHao
  • @date 2021/9/16 0016 11:26
    */
    public class eat {
    public void eating(){
    System.out.println(“吃吃吃”);
    }
    }

package spring;

/**

  • @author TangShengHao
  • @date 2021/9/15 0015 17:42
    */
    public class hello {
    public void hi(){
    System.out.println(“hello spring~”);
    }
    }//目前:可以new创建临时对象直接调用
    //新:LOC spring来调用


/spring创建的对象如果不经过手动转型,则默认只能用object接收/
//向下转型:把父类类型变成子类类型,目的是要用子类的功能
eat e = (eat) o1;
e.eating();

    hello h =(hello) o;
    h.hi();


    //向下转型写法2
    eat o2 = (eat)spring.getBean("eat");
    o2.eating();
}

}

getBean就是通过反射创建对象

11:51:59.527 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4f9a3314
11:51:59.705 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 2 bean definitions from class path resource [spring-config.xml]
11:51:59.740 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean ‘hello’
11:51:59.756 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean ‘eat’
spring.hello@411f53a0
spring.eat@2b71e916
吃吃吃
hello spring~
吃吃吃

spring层—业务层

对象创建是有初始化---->销毁流程的, 整个生命周期都由spring框架代劳

首先创建类–>对spring来说全都是bean–>bean交给spring管理–getbean
我们给spring bean
配置文件–bean标签里:全路径+ID唯一标识

配置bean的过程:IOC

配置文件被spring扫描到–>IOC去new

IOC底层:MAP操作(JAVA集合部分)

底层能拿到的是.class文件,.java是为了开发者方便看,所以这里使用反射来拿取(甚至暴力反射)

IOC容器:
{“1号的ID”=Class.forName(“1号的全路径”).newInstance()
,“2号的ID”=Class.forName(“2号的全路径”).newInstance()
}

bean标签有了,就可以new 了, 单例(默认,为了省时间省内存) 多例

spring.getbean(“key”):
根据map里的key找到map里的value(类的全路径–反射用–以获取类/字节码文件,并创建对象)

想调用对象的方法,把object强转(向下造型–OOP继承部分)

spring框架面试必问:IOC,bean标签


对IOC改造:注解方式开发(远离了底层)

但这种操作方式难以实现大批量业务要求

给列上特定注解–spring框架提供的@Controller—spring的快捷new?
用注解+扫描注解

1.先创建类,因为注解开发,所以不用bean,加注解

2.配置扫描机制,扫描到才new(基于包的扫描,扫描指定包里new其中加了注解的类)

扫描完后该new的都new好了,直接测试

*测试类集中写在test文件夹下的java目录下

(类想让spring IOC自己 需加注解@Component–用来让spring完成IOC)

配置文件–在resource目录下new一个xml文件(spring xml文件)
(放在正确的位置)(这次不写大量的bean标签 而是 只写一个包扫描)
<context:component-scan base-package=“指定包的路径”></context:component-scan>

							  测试文件
//单元测试方法
@Test
public void show1(){
    //1.读取配置文件
    ClassPathXmlApplicationContext spring = new ClassPathXmlApplicationContext("spring.xml");
    //2.getBean()--参数是类名,首字母小写
    //类名首字母变小写作为bean的名字
    Object o = spring.getBean("student");
    System.out.println(o);

}


								类文件

//用来让spring完成IOC
@Component
public class Student {
public void study(){
System.out.println(“你好啊”);
}
}

								配置文件
<context:component-scan base-package="cn.tedu.spring"></context:component-scan>

IOC的注解方式
1.创建类,类上使用IOC的注解
2.创建配置文件,指定包的扫描的路径
2.直接getBean(“类名首字母要变成小写”)

依赖注入
DI的前提是先完成IOC

总结
IOC:Spring框架创建对象
使用步骤:
1.在类上使用注解@Component @Service @Controller
2.配置包扫描

DI:依赖注入,把两个对象之间的关系依赖.
使用步骤:
1.先完成IOC
2.用注解@Autowired


AOP面向切面编程

IDEA导入model:
法1.pom.xml 右键最后一个选项->add as maven project

法2:

OOP思想时期:看到new就是创建了对象

现在spring把所有的对象都放在容器里,想要就调用(加了component就是放进容器里)

怎么放 resource里的xml文件

1.标签id和class

获取配置文件

MVC:把一个项目分层(分多个包,每个包下面都是不同的群体)

spring框架:一个开源框架,最大的目的就是使JAVA EE开发更加容易
致力于提供一个以统一的、高效的方式构造整个应用,
并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。
可以说Spring是一个提供了更完善开发环境的一个框架,
可以为POJO(Plain Ordinary Java Object)对象提供企业级的服务。

Spring Boot 是 Spring 的基础上提供的一套全新的开源框架,
其目的是为了简化 Spring 应用的搭建和开发过程。
Spring Boot 去除了大量的 XML 配置文件,简化了复杂的依赖管理。

Spring Boot 具有 Spring 一切优秀特性,Spring 能做的事,Spring Boot 都可以做
而且使用更加简单,功能更加丰富,性能更加稳定而健壮。
随着近些年来【微服务】技术的流行,Spring Boot 也成了时下炙手可热的技术。

ioc spring创建对象

di spring对象依赖

maven:管jar包的

spring mvc(控制层):Spring框架下基于mvc的Web应用开发模块

bean:包装的是 Object(对象)

spring框架流程很关键!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值