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的反射 -
*/
<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框架流程很关键!!!