0726
IDEA 工具
分配更多的内存给IDEA,一般默认即可
在加载大型项目时,可将内存调整到更高
一般建议是物理内存的一半:
-Xmx8192m
表示IDEA工具最多可申请的内存空间
查看源代码时,一定记得先下载,再查看
在源代码中 点击 右上角的“Download Source”
下载到本地
工具卡住的原因,是网络不稳定,在线查看加载慢/卡住了
2022年10月1日,涨价
Spring Core 的功能
创建对象,维护对象之间的关系
创建对象
维护对象之间的关系
手工管理对象之间的关系
Phone("ARM", "6G") iPhone13p
参数传入的时机,是在生成构造过程中
phone = new Phone("ARM", "6G");
Computer() 组装台式机
参数传入的时机,可在对象创建后,使用set方法传入
comp = new Computer();
comp.setMainboard("技嘉");
comp.setCpu("英特尔");
comp.setRam("Kingston");
Student()
stu = new Student();
stu.setName("张三");
stu.setAge(23);
stu.setPhone(phone); // phone是引用变量(reference)
stu.setComputer(comp); // comp是引用变量(reference)
Spring管理对象之间的关系
依赖注入概念
将一起工作的具有关系的对象,
通过 构造方法参数 或 方法参数 传入建立关联,
容器的工作是 创建bean 时,注入这些依赖关系
DI全称是Dependency Injection
IOC是一种思想,DI是具体的实现手段
DI注入的方式:构造器注入 和 Setter注入
实战:注入基本值
创建Module
spring_demo_3_di
创建com.jt.pojo
Phone
Computer
配置application.xml
测试
实战:自动注入 autowire
实战:注入引用值ref
创建com.jt.pojo
Student
配置application.xml
测试
实战:注入基本值数据、引用对象、集合
创建 com.jt.pojo.MessageBean
配置 application.xml
测试
实战:构建全局集合,并注入测试
配置application.xml
注入全局集合
测试
实战:Spring表达式
创建com.jt.pojo.ExpressionBean
项目实战:创建DBCP数据源连接池
pom.xml中添加坐标
commons-dbcp2
mysql-connector-java
application-datasource.xml
从 db.properties 文件中加载数据到Properties集合中
纳入Spring容器管理
TestSpring3.java
获取数据源对象
通过数据源对象,获得连接对象
面向接口编程
在编写代码时,尽可能写接口
DataSource ds = context.getBean(DataSource.class);
在Spring容器中,按照类型查找,相应的java bean
因为BasicDataSource是DataSource的子类/实现类
所以,可以正常获取该java bean,并使用。
javax.sql.DataSource 是接口
org.apache.commons.dbcp2.BasicDataSource 是实现类
对象属性 VS Bean属性
对象属性,就是指对象中的成员变量
Bean属性是指:
和getXxx() 和 setXxx()相关的
将get或set字符去除,Xxx首字母小写,得到的变量名,称作为bean属性名
对象属性名 和 Bean属性名,通常都是一样的!
EL表达式中,取的都是bean属性值
${product.title} => "product"->p p.getTitle()
${product.price} => "product"->p p.getPrice()
public class Computer implements Serializable {
// 对象的属性 mainboard cpu ram
private String mainboard; //主板
private String cpu;
private String ram;
//Bean属性:MB、Mainboard
public String getMB() {
return mainboard;
}
public void setMB(String mainboard) {
System.out.println(" set注入bean属性mainboard:" + mainboard);
this.mainboard = mainboard;
}
public String getMainboard() {
return mainboard;
}
public void setMainboard(String mainboard) {
System.out.println(" set注入bean属性mainboard:" + mainboard);
this.mainboard = mainboard;
}
}
创建新的module:spring_demo_4_mvc
创建包:com.jt
User
id, name
UserController(类比于servlet)
private UserService;
private User user; //<-- 注入User信息,模拟页面传入的请求数据
addUser(){
userService.addUser(user);
}
UserService
UserServiceImpl
private UserDao;
addUser(User user) {
userDao.insert(user);
}
UserDao
UserDaoImpl
private DataSource;
addUser(User user){
Connection con = ...
System.out.println("获得连接,插入数据成功!");
}
DataSource
在 application.xml 配置文件中,创建对象,并设置对象之间的关系
自己笔记:
0726:
1、Spring为了使用注解简化开发,并没有提供构造函数注入、setter注入对应的注解,只提供了自动装
配的注解实现。
2、推导顺序 new对象 构造方法和set方法注入属性值-----》通过xml文件注入属性值----》通过注解的自动装配注入属性
3、ctrl+D 复制到下一行----ctrl+tab键 切换idea的页面---shift连按两下(所有你要查看的类)
4、依赖注入的底层原理 通过属性和属性名来判断这是什么注入,然后属性值有特殊的规定在通过还原成特定的样子,反射可以创建对象,也可得到相应的变量名,类型,方法名,构造函数等等,然后通过循环判断去找到对应需要注入的东西,通过反射注入进去
5、xmlns:声明我 需要使用的标签
xsi:对应工具标签的校验和查询
6、查看编译后的源码,需要反编译和反汇编 然后可以看到逻辑----如何想改变,就需要其他工具把要改的代码注入到线程中去(代码也只能是对应的二进制 需要一步步在翻译下来)
-----哔哩哔哩里面有
7、Spring配置中的bean直接引用其它bean的属性值来赋值给当前bean的属性,也可以直接调用其它bean的方法获取返回值来赋值给当前bean的属性,并且可以进行参数传递,这样可以省去在bean中注入需要获取属性值的bean。
8、编译看左边当你要使用哪些方法就要看左边的类型里面有没有,所有一般返回Object类型 都需要强转,不然在编译阶段,使用的方法(没强转)只能用Objec的方法
9、javabean就是实体类:用于封装数据
10、shift+f6 修改一个值就能改变其他地方相同变量的 值 (相同名字 修改一处 全部变)
总结:
创建Bean的三种方式
使用注解的目的:简化xml配置
注解和xml配置的对应
@Configuration 代表xml配置文件 的整体框架
@ComponentScan 相当于组件扫描(需要扫描注解)
@Component 相当于
@Scope 相当于scope的属性
@Autoware (根据类型) 自动装配 引用类型(对象类型) 更具类型匹配 如果有冲突 就需要加 @Qualified(根据名称)
@Value :注入普通类型属性
@Resource :可以根据类型注入,可以根据名称注入
相当于autowire属性:byname ,bytype



