2020-09-01
今日计划:看完代码规划,纠结一下要不要买国行健身环!不买国行,买日版哈哈哈哈哈哈哈哈哈哈哈哈我买好了
2020-09-02
今日计划:
- 去营业厅问社保卡的事情 下午去问
- 注册任天堂账号,俩。 等游戏机到了再注册
- 再了解一下aop ioc
IOC容器
控制反转,减低耦合
ioc底层就是对象工厂
- spring提供ioc容器实现的两种方式
- BeanFactory(一般不提供开发人员使用):加载配置文件时,不创建对象。在获取/使用对象时,才创建对象。
- ApplcationContext(BeanFactory的子接口,更强大,一般由开发人员使用):在加载配置文件时,就会在配置文件中就创建对象。
- ApplicationContext接口有实现类
IOC操作bean管理
bean管理指:1)创建对象 2)注入属性
-
bean管理操作2种:
1)基于xml配置文件方式实现
-
DI:注入属性
1)set方法注入
在spring配置文件配置对象创建,配置属性注入
2)有参构造注入
2020-09-03
继续学习spring 打好基础 冲啊!!
- 字面量(就是属性的赋值)
-
null值
-
属性值中包含特殊符号 (eg.value里面有<<>>)
2、注入属性-外部bean
service调用dao,就是引用外部bean
在配置文件中操作: 在service中注入dao
3、注入属性-内部bean和级联赋值
(与数据库一对多,多对多有关系)
-
一对多关系,部门和员工
先创建两个类
在实体类中表示一对多的关系:
再在spring配置文件中进行配置:内部bean
4、注入属性-级联赋值
修改配置文件
外部bean:ref是引入根据bean的id引入property'
1、注入数组、list集合、map集合类型属性
- 写配置文件 bean的配置
-
集合类型:1、对象创建2、属性注入
-
如果注入的list,里面值是对象
5、把集合注入部分提取出来
-
-
引入名称空间util
-
使用util标签完成list集合注入提取
-
IOC操作Bean管理(FactoryBean)
- bean有2种:普通bean(在配置文件中的定义类型和调用时的返回类型是一样的)和工厂bean(定义类型和返回类型可以不一样)
-
工厂bean:创建类,实现接口factorybean,实现接口的方法,可以用泛型,在实现的方法中定义返回的bean类型
-
工厂bean:创建类,实现接口factorybean,实现接口的方法,可以用泛型,在实现的方法中定义返回的bean类型
IOC操作Bean管理(bean的作用域)
- 在spring中,设置bean是单实例还是多实例。默认是单实例。
-
单实例对象,地址相同
-
设置单实例还是多实例:bean标签中有设置的属性scope,单实例(singleton),多实例(Protype)。
- 设置singleton的时候,spring配置文件的时候就会创建单实例对象;设置protype,不是在spring加载配置文件的时候创建的,是在调用getbean方法的时候创建的多实例对象。
-
单实例对象,地址相同
IOC操作Bean管理(bean生命周期)
生命周期:对象从创建到销毁的过程。
-
1通过构造器创建对象(无参构造)
2为bean的属性设置值和其他bean的引用(调用set方法)
3把bean的实例传给bean后置处理器的方法
-
4调用bean的初始化方法(要配置)
-
5把bean的实例传给bean后置处理器的方法
-
6bean可以使用了(对象获取到了)
-
7当容器关闭时,调用bean的销毁方法(要配置,要手动销毁)
4、bean的后置处理器,bean的生命周期有7步
IOC操作Bean管理(xml自动装配)用的很少,一般用注解
-
根据指定装配规则(属性名称或者属性类型),spring自动将匹配的属性进行注入
自动装配 bean的属性autowire 常用值:byname属性名称,bytype属性类型
IOC操作Bean管理(外部属性文件)
先引入jar包
-
直接配置连接池
-
引入外部属性文件配置数据库连接池
引入配置文件中,名称空间
在spring配置文件中引入
IOC操作Bean管理(基于注解方式)
- 结构:@注解名称(属性名称=属性值,属性名称=属性值)
- 目的:简化xml配置
- Spring提供的注解:
- @Component
- @Service
- @Controller
- @Repository
-
创建对象
2、开启组件扫描
1、引入aop依赖jar包
3、在类上面
4、细节配置,
基于注解,属性的注入
-
@AutoWired:根据属性类型进行自动装配
-
1、service和dao对象创建
、serviec类上加@service
-
2、service里注入dao
-
1、service和dao对象创建
-
@Qualifier:根据属性名称进行注入
-
@Resource:根据类型或属性名称注入,resource是javax扩展包里的,不是spring里的
-
@Value:普通类型属性注入(比如string)
纯注解开发
-
创建配置类,在类上加上@Configuration,@ComponentSca
n(basepackage={包的路径})
-
编写测试类
AOP
- aop底层使用动态代理。
-
有接口情况 用 jdk动态代理实现:创建接口实现类的代理对象,实现增强方法。
-
没有接口情况 CGLIB动态代理
创建当前类的子类的代理对象 来增强方法
-
AOP(JDK代理)底层原理: 使用proxy类:返回指定接口的代理类的实例 调用newProxyInstance方法
步骤:
2、
3、
4、
5、
6、
7、
AOP术语
-
连接点
-
切入点
-
通知(增强)
-
切面
AOP操作(准备)
- 基于AspectJ(一个独立的框架)实现AOP操作:使用基于注解方式实现
-
引入aop、aspectj相关依赖
- 切入点(实际要增强的方法)表达式:知道要对哪个类的哪个方法进行增强
-
AOP操作(AspectJ注解方式)
1、创建类2、创建增强类,编写增强逻辑(用不同方法实现5种通知)
3、进行通知的配置:
-
在spring配置文件中,开启注解扫描。
-
使用注解创建User和UserProxy对象。
在两个类上加注解@Component
-
在增强类上添加注解@Aspect.
-
在spring配置文件中开启生成代理对象。
4、 配置不同类型的通知:在增强类中,在作为通知方法上面添加通知类型注解,使用切入点表达式配置
5、相同切入点抽取
6、多个增强类,设置优先级
在增强类的上面添加注解@Order(1)//(数字越小,优先级越高)
AOP操作(AspectJ配置文件)
建一个book类
完全注解开发
-
配置类加@Configuration和@ComponentScan(basePackages={"xxx.xx"})和@EnableAspectAutoProxy(proxyTargetClass=true)
JdbcTemplate:方便对数据库的增删改查
- 引入相关jar包
-
在spring配置文件中配置数据库连接池
-