0726
IDEA 工具
分配更多的内存给IDEA,一般默认即可
在加载大型项目时,可将内存调整到更高
一般建议是物理内存的一半:
-Xmx8192m
表示IDEA工具最多可申请的内存空间
查看源代码时,一定记得先下载,再查看
在源代码中 点击 右上角的“Download Source”
下载到本地
工具卡住的原因,是网络不稳定,在线查看加载慢/卡住了
2022年10月1日,涨价
Spring Core 的功能
创建对象,维护对象之间的关系
创建对象
<bean id="" class="" />
<bean id="" class="" factory-method=""/>
维护对象之间的关系
手工管理对象之间的关系
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中添加坐标
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version><!-- 8.0.9-rc -->
</dependency>
application-datasource.xml
<util:properties id="" location="...">
从 db.properties 文件中加载数据到Properties集合中
纳入Spring容器管理
<bean id="ds" class="数据源类型">
<property ... value="#{...}"/>
</bean>
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
<bean id="" class="User">
<property ...>
<property ...>
</bean>
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
<bean id="" class="BasicDataSource">
在 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的三种方式
<!--创建Bean的三种方式 -->
<!-- 第一种方式:使用默认构造函数创建。
在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。
采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
-->
<!-- 第二种方式: 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
-->
<!-- 第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
<bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>
-->
使用注解的目的:简化xml配置
注解和xml配置的对应
@Configuration 代表xml配置文件 的整体框架
@ComponentScan 相当于组件扫描(需要扫描注解)
@Component 相当于<bean>标签 和 id属性和class属性
@Scope 相当于scope的属性
@Autoware (根据类型) 自动装配 引用类型(对象类型) 更具类型匹配 如果有冲突 就需要加 @Qualified(根据名称)
@Value :注入普通类型属性
@Resource :可以根据类型注入,可以根据名称注入
相当于autowire属性:byname ,bytype